线程的应用之车票

class Xc1 implements Runnable{
public static int tickets=100;
static String aa=new String("1");//字符串随意定义,定义在函数上边
/*通过类创建了两个线程,这样在new 对象的时候就会创建了两个synchronized(aa)
* 中的aa对象,所以要用static将aa设置成常量
* synchronized的作用是,让它所管辖的代码块,
*  要么全部执行完,要么全部不执行
*/
public void run(){
//synchronized 修饰函数不需要字符串,相当于默认是this
while(true){
synchronized (aa){
//即可以修饰代码块,又可以修饰函数
if(tickets>0){
System.out.println(Thread.currentThread().getName()+"正在卖第"+(101-tickets)+"张车票");
--tickets;
}else{
break;
}
}

}
}
public class java6_6 {
public static void main(String[]rags){
Xc1 xc=new Xc1();
Thread bb=new Thread(xc);
bb.setName("西安南站");
bb.start();


Xc1 xc1=new Xc1();
Thread cc=new Thread(xc1);
cc.setName("西安北站");
cc.start();


Xc1 xc2=new Xc1();
Thread dd=new Thread(xc2);
dd.setName("西安东站");
dd.start();
}

}


class Xc2 extends Thread{
public static int tickets=100;
static String aa=new String("1");
public void run(){
while(true){
synchronized(aa){
if(tickets>0){
//System.out.println(Thread.currentThread().getName()+"正在卖第"+(101-tickets)+"张车票");
System.out.println(Xc2.currentThread().getName()+"正在卖第"+(101-tickets)+"张车票");
--tickets;
}else{
break;
}
}
}
}
}
public class java6_8 {
public static void main(String[]rags){
Xc2 xc1=new Xc2();
xc1.setName("西安南站");
xc1.start();
/*Thread bb=new Thread(xc1);
bb.setName("西安南站");
bb.start();
*/
Xc2 xc2=new Xc2();
xc2.setName("西安北站");
xc2.start();
/*Thread cc=new Thread(xc2);
cc.setName("西安北站");
cc.start();
*/
Xc2 xc3=new Xc2();
xc3.setName("西安东站");
xc3.start();
/*Thread dd=new Thread(xc3);
dd.setName("西安东站");
dd.start();
*/
}
}

class Xc2 extends Thread{
	public static int tickets=100;
	static String aa=new String("1");
	public void run(){
		while(true){
			synchronized(aa){
			//两个线程的aa是自己的,并不是公共的
				if(tickets>0){
					//System.out.println(Thread.currentThread().getName()+"正在卖第"+(101-tickets)+"张车票");
					System.out.println(Xc2.currentThread().getName()+"正在卖第"+(101-tickets)+"张车票");
					--tickets;
				}else{
					break;
				}
			}
		}
	}
}
public class java6_8 {
	public static void main(String[]rags){
		Xc2 xc1=new Xc2();
		xc1.setName("西安南站");
		xc1.start();
		/*Thread bb=new Thread(xc1);
		bb.setName("西安南站");
		bb.start();
		*/
		Xc2 xc2=new Xc2();
		xc2.setName("西安北站");
		xc2.start();
		/*Thread cc=new Thread(xc2);
		cc.setName("西安北站");
		cc.start();
		*/
		Xc2 xc3=new Xc2();
		xc3.setName("西安东站");
		xc3.start();
		/*Thread dd=new Thread(xc3);
		dd.setName("西安东站");
		dd.start();
		*/
	}
}
class Xc1 implements Runnable{
	public static int tickets=100;
	 static String aa=new String("1");//字符串随意定义,定义在函数上边
	/*通过类创建了两个线程,这样在new 对象的时候就会创建了两个synchronized(aa)
	 * 中的aa对象,所以要用static将aa设置成常量
	 * synchronized的作用是,让它所管辖的代码块,
	 *  要么全部执行完,要么全部不执行
	*/
	public void run(){
		//synchronized 修饰函数不需要字符串,相当于默认是this
		while(true){
			synchronized (aa){
				//即可以修饰代码块,又可以修饰函数
				if(tickets>0){
					System.out.println(Thread.currentThread().getName()+"正在卖第"+(101-tickets)+"张车票");
					--tickets;
				}else{
					break;
				}
			}
		} 
	}
}
public class java6_6 {
	public static void main(String[]rags){
		Xc1 xc=new Xc1();
		Thread bb=new Thread(xc);
		bb.setName("西安南站");
		bb.start();

		Xc1 xc1=new Xc1();
		Thread cc=new Thread(xc1);
		cc.setName("西安北站");
		cc.start();

		Xc1 xc2=new Xc1();
		Thread dd=new Thread(xc2);
		dd.setName("西安东站");
		dd.start();
	}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值