java之学习多线程(二)

     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类去实现多线程就有点不合适了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值