`
lpbj010
  • 浏览: 2446 次
社区版块
存档分类
最新评论

java 多线程的实现

阅读更多
java 多线程的实现
简单的说,java多线程分两种形式,继承Thread类,实现Runnable接口。
继承Thread类
public class TestThread extends Thread{
	public void run(){
		//do work
	}
	
	public static void main(String[] args){
		Thread tt = new TestThread();
		tt.start();
	} 
}

实现Runnable接口
public class TestThread implements Runnable{
	public void run(){
		//do work
	}
	
	public static void main(String[] args){
		Thread tt = new Thread(new TestThread());    (A)
		tt.start();
	} 
}

感觉相差不大,其实本质上是一样的,看Thread类的源码,
public class Thread implements Runnable
可以看到Thread自己实现了Runnable接口,再看Thread类中的run()方法

	@Override
    public void run() {
        if (target != null) {
            target.run();
        }
    }
	


执行了target的run()方法,target是初始化时带进来的实现了Runnable的类,在上述的代码(A)处,所以我们最终都是执行了被实现的Runnable中的run()方法。

多线程的开始方法start()方法,中调用start0()方法,可以看到这个方法是个native方法,它会重新启动个线程执行run()方法。所以多线程调用使用start(),
直接调用run()方法。


在jdk1.5以后,多了个java.util.concurrent包,这个包里提供了一些新的多线程相关的类。
其中类似Runnable接口的Callable接口,实现其中的call()方法,就可以被ExecutorService类执行,当然底层还是转换成了Thread执行。

所以java多线程可以概括成,Thread通过调用native的start0方法新启动了个线程,执行run()方法。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics