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

Java多线程之 Thread VS Runnable 【带案例】

时间:2015-08-31 19:40:48      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:

技术分享技术分享


为此,我们举个例子,假设有火车站三个窗口,在卖火车票,总共只有5张票。每一个线程相当于一个窗口,分别售票

<strong>package com.thread;

class myThread extends Thread{
	
	private int ticketsCount=5;//一种有5张票
	private String name;//窗口,也即是线程的名字
	
	public myThread(String name){
		this.name=name;
	}

	@Override
	public void run() {
		while(ticketsCount>0) {
			//ticketsCount--;//如果还有票,就卖掉一张
			System.out.println(name+"有"+ticketsCount+"张票,卖了1一张票,剩余票数为:"+ --ticketsCount);
			//System.out.println(name+"卖了1一张票,剩余票数为:"+ticketsCount);
		}
	}

	
	
}
public class TicketsTread {

		public static void main(String args[]) {
			//创建三个线程,模拟三个窗口卖票
			myThread t1=new myThread("窗口1");
			myThread t2=new myThread("窗口2");
			myThread t3=new myThread("窗口3");
			
			//启动这三个线程,也即是窗口开始卖票
			t1.start();
			t2.start();
			t3.start();
		}
}

</strong>



输出为:技术分享



这样的结果说明了,每个窗口(线程)都卖了5张票,这是因为创建了3个Thread对象,每个对象有自己的成员实例变量。

因为每个线程,mt1,mt2,mt3分别是一个继承了Thread类的一个对象,所以对象拥有其所属类的私有或共有的成员变量或者成员方法,也就是说他们的变量,也即是票数ticketCount都是每个对象“自己”私有的,“各自为营”,资源并不是共享的。 那么,你就会看到,每个窗口都有5张票的情况咯。。


再使用runnable 来实现这个示例。


package com.thread;

class myThread_Runnable implements Runnable{
	private int ticketsCount=5;//一种有5张票
	
	public void run() {//如果给run方法加锁,那么会出现一个窗口会卖光所有票的现象
		while(ticketsCount>0) {
			ticketsCount--;//如果还有票,就卖掉一张
			System.out.println(Thread.currentThread().getName()+"卖了1一张票,剩余票数为:"+ticketsCount);
		}
	}

}

public class TicketsRunnable {
	
		public static void main(String args[]){
			myThread_Runnable mt=new myThread_Runnable();
			//创建三个线程,来模拟三个售票窗口
			Thread t1=new Thread(mt,"窗口1");
			Thread t2=new Thread(mt,"窗口2");
			Thread t3=new Thread(mt,"窗口3");
			
			//启动这三个线程,也即是三个窗口,开始卖票
			t1.start();
			t2.start();
			t3.start();
		}
}
技术分享


上面这个是一个及其特殊的情况,线程(窗口)1一次性的使用了CPU并执行完了了run方法的所有代码,然后进程结束。

下面这个是一般性的结果:

技术分享


上面这个输出就可以看出来,线程资源抢夺所导致的交叉执行。





























































版权声明:本文为博主原创文章,未经博主允许不得转载。

Java多线程之 Thread VS Runnable 【带案例】

标签:

原文地址:http://blog.csdn.net/uniquewonderq/article/details/48137767

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