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

java之学习多线程(二)

2015-08-28 14:35 477 查看
java中Thread和Runnabel实现多线程是有所区别的,使用Runnable接口可以有效解决java中单继承带来的局限性。并且Thread类也是Runnable接口的子类: public class Thread extends Object implements Runnable

下面来通过一个利用多线程实现的买票小程序来了解一下Thread和Runnable实现多线城市在对内存中数据操作的不同。

public class Different_Thread_and_Runnable {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		t_hread t1 = new t_hread();
		t_hread t2 = new t_hread();
		t_hread t3 = new t_hread();
		//t1.start();
		//t2.start();
		//t3.start();//Thread 多线程实现三个窗口一起买票
		System.out.println("........................................");
		r_unnable re = new r_unnable();
		new Thread(re).start();
		new Thread(re).start();
		new Thread(re).start();//Runnable 多线程实现三个窗口一起买票。
	}

}
//继承Thread 的多线程类
 class t_hread extends Thread {
	private int ticket = 5;
	@Override
	public void run(){
		for(int x = 0;x < 50;x++)
		{
			if(this.ticket >0)
			{
				System.out.println(" 买票,ticket ="+ this.ticket--);
			}
		}
	}
}
 //实现 Runabel接口的多线程类
 class r_unnable implements Runnable {
	private int ticket = 5;
	@Override
	public void run(){
		for(int x = 0;x < 50;x++)
		{
			if(this.ticket >0)
			{
				System.out.println("Runnable 买票,ticket ="+ this.ticket--);
			}
		}
	}
}
Thread 实现得到的结果:

买票,ticket =5

买票,ticket =4

买票,ticket =3

买票,ticket =5

买票,ticket =5

买票,ticket =4

买票,ticket =3

买票,ticket =2

买票,ticket =1

买票,ticket =4

买票,ticket =2

买票,ticket =1

买票,ticket =3

买票,ticket =2

买票,ticket =1

Runnable 实现得到的结果:

........................................

Runnable 买票,ticket =5

Runnable 买票,ticket =4

Runnable 买票,ticket =3

Runnable 买票,ticket =2

Runnable 买票,ticket =1

由此我们可以得出结论:程序的本意为让三个售票窗口同时买网站上剩下的五张票,可是Thread实现中每张票都被买了五次,说明个线程各干各的活并没有达到同步数据,互相是独立的。所以Thread在这种买票的情况下用得出是错误的结果。Runnable 也是启动了三个线程对象,并且也达到了我们想要的结果。原因是这三个线程对象都占着同一个Runnable接口对象的引用,所以实现了数据共享的操做。所以我们在变成过程中,要考率实际情况来使用。

当然Thread也可以实现数据的共享,但是通过Thread类继承的多线程主体类再去利用Thread类去实现多线程就有点不合适了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: