java多线程runnable 和Thread到购票实例

Thread类

/**
 * 1、编写一个普通类,然后去继承Thread这个父类
 * 2、子类去override Run方法(运行线程)(JVM自动调用)
 * 3、实例化当前对象,用对象的引用去掉用start方法(开启一个线程)
 * 
 *
 */
public class MyThread extends Thread {
	
	private String type;
	
	public MyThread(String type){
		this.type=type;
	}
	
	@Override
	public void run() {
		// TODO Auto-generated method stub
		for(int i=1;i<=10;i++){
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println(type+"="+Thread.currentThread().getPriority());
		}
	}

	//main是程序运行入口,同时也是一个主线程
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//Thread.currentThread().getName()
		//获取当前这个线程的名字
		//getPriority获取线程的优先级
		for(int i=1;i<=30;i++){
			System.out.println("main="+Thread.currentThread().getPriority());
		}
		
		MyThread mt1=new MyThread("线程A");
//		mt.run();
		mt1.start();
		//不能同时利用同一个引用重复调用start方法
//		mt.start();
		MyThread mt2=new MyThread("线程B");
		mt2.start();

	}

}




runnable接口




/**
 * 
 *1、编写一个普通类,实现Runnable接口
 *2、覆盖接口中的Run方法
 *3、实例化当前这个接口的实现类,同时还要实例化Thread这个类
 *4、因为实现Runnable这个接口的类,不能去调用start方法,
 *   所以需要将实现类的实例名传递给Thread有参构造,
 *5、通过Thread实例名去调用start方法
 *
 */
public class MyRunnable implements Runnable{
	
	private String type;
	
	public MyRunnable(String type){
		this.type=type;
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		for(int i=1;i<=10;i++){
			System.out.println(type+"="+Thread.currentThread().getName());
		}
	}
	
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MyRunnable mr1=new MyRunnable("线程A");
		Thread th1=new Thread(mr1);
		th1.start();
		
		MyRunnable mr2=new MyRunnable("线程B");
		Thread th2=new Thread(mr2);
		th2.start();
	}
}

购票实例, 假设有5个窗口共5张票。


public class ThreadApp extends Thread{
	
	//一共为5张票
	private int type=5;
	

	@Override
	public void run() {
		// TODO Auto-generated method stub
		for(int i=1;i<=50;i++){
			if(type>0){
				System.out.println(Thread.currentThread().getName()+"卖出="+type--);
			}
		}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ThreadApp ta1=new ThreadApp();
		ta1.start();
		
		ThreadApp ta2=new ThreadApp();
		ta2.start();
		
		ThreadApp ta3=new ThreadApp();
		ta3.start();
	}

}
运行发现卖了15张票。查看API 发现Thread类是不共享本类数据的。所以只能实现Runnable接口

public class RunnableApp implements Runnable{
	
	//一共为5张票
	private int type=5;
	

	@Override
	public void run() {
		// TODO Auto-generated method stub
		for(int i=1;i<=50;i++){
			if(type>0){
				System.out.println(Thread.currentThread().getName()+"卖出="+type--);
			}
		}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		RunnableApp ta1=new RunnableApp();
		new Thread(ta1).start();
		new Thread(ta1).start();
		new Thread(ta1).start();
	}
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值