您的位置:首页 > 其它

创建线程的方法 Thread Runnable

2012-12-11 16:20 218 查看
一:使用Theard的公共静态方法直接生成并控制,如下:

public class currentThread{
public static void main(String args[]){
Threadthread = Thread.currentThread();
System.out.println("线程名称是:"+thread.getName());
System.out.println("线程的优先级是:"+thread.getPriority());
thread.setName("thread one");
System.out.println("线程现在的名字是:" +thread.getName());
thread.setPriority(1);
System.out.println("线程现在的优先级是:" +thread.getPriority());

try{
for (int i =0; i < 5; i++) {
System.out.println(i);
thread.sleep(1000);
}
} catch(Exception e) {
// TODO:handle exception
}
}
}


二:工程中最常用的方法,接口Runnable,如下:

public class newThreadimplements Runnable{
//使用Runnable定义的子类中没有start()方法,只有Thread类中才有。此时观察Thread类,有一个构造方法:publicThread(Runnable targer)
//此构造方法接受Runnable的子类实例,也就是说可以通过Thread类来启动Runnable实现的多线程。start()可以协调系统的资源;

//   newThread(){
//       Threadthread = new Thread(this,"t_1");//直接重新命名
//      System.out.println(thread);
//      thread.start();
//   }

newThread(String name){

};

//在正式方法中直接用newThread mt1=new newThread("线程1")就可以了
static newThread mt1=new newThread("线程1");

@Override
public void run() {
// TODOAuto-generated method stub

}

public static void main(String args[]){

//newnewThread();

newThread(mt1).start();

try{
for (int i =0; i < 10; i++) {
System.out.println(i);
Thread.sleep(1000);
}
} catch(Exception e) {
// TODO:handle exception
}

}

}


三:Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限,下面看例子:

class MyThread extends Thread{
privateString name;
publicMyThread(String name) {
super();
this.name = name;
}
public voidrun(){
for(int i=0;i<10;i++){
System.out.println("线程开始:"+this.name+",i="+i);
}
}
}

package org.thread.demo;
public classThreadDemo01 {
public static void main(String[] args) {
MyThread mt1=new MyThread("线程a");
MyThread mt2=new MyThread("线程b");
mt1.run();
mt2.run();
}
}


但是,此时结果很有规律,先第一个对象执行,然后第二个对象执行,并没有相互运行。在JDK的文档中可以发现,一旦调用start()方法,则会通过JVM找到run()方法。下面启动

start()方法启动线程:

package org.thread.demo;
public class ThreadDemo01 {
publicstatic void main(String[] args) {
MyThread mt1=new MyThread("线程a");
MyThread mt2=new MyThread("线程b");
mt1.start();
mt2.start();
}
};


这样程序可以正常完成交互式运行。那么为啥非要使用start();方法启动多线程呢?

在JDK的安装路径下,src.zip是全部的java源程序,通过此代码找到Thread中的start()方法的定义,可以发现此方法中使用了private native voidstart0();其中native关键字表示可以调用操作系统的底层函数,那么这样的技术成为JNI技术(java NativeInterface)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: