您的位置:首页 > 编程语言 > Java开发

java多线程的创建方式

2016-05-09 09:33 591 查看
根据Thread类中的run方法

public void run() {

if (this.target == null)

return;

this.target.run();

}

可以知道运行多线程代码有两种方式,一种是运行Thread类run方法中的代码,一种是运行target中的run代码。

方法一:运行Thread类run方法中的代码

Thread thread1=new Thread(){

@Override

public void run() {

while(true){

try {

Thread.sleep(500);

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println(Thread.currentThread().getName());

}

}

};

thread1.start();

方法二:运行target中的run代码

target是何物,我们来追踪一下:

private Runnable target;

他是Thread类的一个Runnable参数,那么他是如何传参进来的呢?

public Thread(Runnable paramRunnable) {

init(null, paramRunnable, "Thread-" + nextThreadNum(), 0L);

}

通过Thread类构造方法传Runnable进来,再调用init方法

private void init(ThreadGroup paramThreadGroup, Runnable paramRunnable,

String paramString, long paramLong) {

init(paramThreadGroup, paramRunnable, paramString, paramLong, null);

}

这是Thread类的一个私有初始化方法

再调用方法

private void init(ThreadGroup paramThreadGroup, Runnable paramRunnable,

String paramString, long paramLong,

AccessControlContext paramAccessControlContext) {

}

在这个方法里有步骤

this.target = paramRunnable;

从而给target赋值。

改方法创建改多线程方式:

Thread thread2=new Thread(new Runnable(){

@Override

public void run() {

while(true){

try {

Thread.sleep(500);

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println(Thread.currentThread().getName());

}

}

});

thread2.start();

那么问题又来了,如果同时存在方法一和方法二的情况,如下代码:

Thread thread3=new Thread(new Runnable(){

@Override

public void run() {

while(true){

try {

Thread.sleep(500);

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println("run:"+Thread.currentThread().getName());

}

}

}){

public void run() {

while(true){

try {

Thread.sleep(500);

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println("thread:"+Thread.currentThread().getName());

}

}

};

thread3.start();

那么该执行哪个代码呢?根据java编程思想,我们知道方法一是覆写了父类的run方法,方法二是父类固有的,所以代码在执行的时候是选择执行子类的run方法,如果子类run方法不存在,才去父类寻找runnable的run方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: