码迷,mamicode.com
首页 > 编程语言 > 详细

多线程的两种实现方式

时间:2015-11-14 19:11:43      阅读:260      评论:0      收藏:0      [点我收藏+]

标签:

java中多线程可以采用两种方式实现,分别是继承Thread类重写run方法和实现Runnable接口重写run方法。

继承Thread类重写run方法举例如下:

/*
	需求:在主线程之外继承Thread类创建两独立线程,分别打印1至50.
*/
class ThreadTest extends Thread{
	
	public void run(){
		
		for(int i = 1; i <= 50; i++)
			System.out.println(Thread.currentThread().getName() + ": "+i);
	}
}

public class Imp_Thread {
	public static void main(String[] args){
	
		ThreadTest tt1 = new ThreadTest();
		ThreadTest tt2 = new ThreadTest();
		tt1.start();
		tt2.start();
	}
}

 实现Runnable接口重写run方法举例如下:

/*
 	需求:在主线程之外实现Runnable接口创建两独立线程,分别打印1至50
 */
class RunnableTest implements Runnable{
	
	public void run(){
		for(int i = 1; i <= 50; i++){
			System.out.println(Thread.currentThread().getName() + ": "+i);
		}
	}
}

public class Imp_Thread {
	public static void main(String[] args){
		RunnableTest rt = new RunnableTest();
		Thread t1 = new Thread(rt);
		Thread t2 = new Thread(rt);
		t1.start();
		t2.start();
	}
}

 两种方式均可实现多线程,但一般操作时选择实现Runnable接口方式,因为java的类单继承、接口多实现机制;其次,接口实现方式可以实现共享数据。如下:

class RunnableTest implements Runnable{
	private int i = 1;
	public void run(){
		for(; i <= 50; i++){
			System.out.println(Thread.currentThread().getName() + ": "+i);
		}
	}
}

public class Imp_Thread{
	
	public static void main(String[] args){
		RunnableTest rt = new RunnableTest();
		Thread t1 = new Thread(rt);
		Thread t2 = new Thread(rt);
		t1.start();
		t2.start();
		
	}
}
运行结果:
Thread-0: 1
...
Thread-1: 49
Thread-0: 50

 该程序主函数创建Runnable的对象rt,并将rt传递至Thread的两个对象t1、t2的构造函数中。类对象的存放地址是java的堆内存,t1、t2操作的是唯一同一片内存地址的同一对象,即实现了数据的共享。

由于数据的共享,也造成了java多线程的安全性问题。

多线程的两种实现方式

标签:

原文地址:http://www.cnblogs.com/yidiudiu/p/4964791.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!