线程

线程的表述:


 *         进程:计算机中的每一个正在执行的程序就是一个进程,一个进程有一个 或者多个线程;
 *             每个应用中的线程 可以同时执行多个不同操作;
 * 
 * 例如:
 *     开发工具:myEclipse:
 *         


 * Java中线程的实现方式:


 *         两种:
 *         第一种:继承therad类 重写 run() 方法,创建子类对象实现线程调用
 *               eg:new Thread 或者子类对象,开始线程:对象.start();
 *         
 *         第二种:实现 Runnable接口();
 *             开启线程 调用 start();
 * 
 *         线程的 特性:
 *             原子性:
 *             可见性:
 *             有序性:
 *             结果无序:

 

   第一种:继承therad类 重写 run() 方法,

 

public class Thread_demo {
	public static void main(String[] args) {
		//创建对象
		Booking bk1 = new Booking("一号窗口");
		Booking bk2 = new Booking("老年人窗口");
		Booking bk3 = new Booking("军人窗口");
		Booking bk4 = new Booking("VIP窗口");
		
		//开始启用线程
		bk1.start();
		bk2.start();
		bk3.start();
		bk4.start();
	}
}

/**
 * 售票操作
 * @author direct
 */
class Booking extends Thread{
	//构造 函数
	public Booking(String name){
		super(name);
	}
	//定义变量
	static int pices=100;
	// 定义一个同步对象
	Object ob="aa";
	
	//重写 run方法,买票
	@Override
	public void run() {
		while(pices>0){
			//执行 代码加锁
			synchronized (ob) {
				if(pices>0){
					System.out.println(super.getName()+"---> 买出了第"+pices+"张票");
					pices--;
				}else{
					System.out.println("票已售罄!!!");
				}
				
				//线程休息 10毫秒
				try {
					this.sleep(1000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		
		}
		
		
		//super.run();
	}
	

 

       第二种:实现 Runnable接口();

 


 * 使用线程模拟 银行存取钱:
 * 		银行 存取 
 * 		ATM取钱
 * 		使用实现接口的方式
 * 
 *  实现思路:
 *  	银行类:实现方法 saveMoney(); z注意 必须 进行 线程 或者同步控制
 *  	ATM类:实现方法getMoney();
 *    
 *      创建对象 启动线程操作同一个 变量(存款);


public class Thread_01 {
	public static void main(String[] args) {
		//创建对象 ATM对象
		Atm am = new Atm();
		//创建线程 对象,将 Atm 放入线程中
		Thread t0 = new Thread(am);
		Thread t1 = new Thread(am);
		Thread t2 = new Thread(am);
		Thread t3 = new Thread(am);
		//启动线程
		t0.start();
		t1.start();
		t2.start();
		t3.start();
		
		AtmTwo amTwo = new AtmTwo();
		//创建线程 对象,将 Atm 放入线程中
		Thread t4 = new Thread(amTwo);
		Thread t5 = new Thread(amTwo);
		Thread t6 = new Thread(amTwo);
		Thread t7 = new Thread(amTwo);
		//启动线程
		t4.start();
		t5.start();
		t6.start();
		t7.start();/**/
	
	}
}

class Bank{
	//定义金额
	private static int sumMoney=2000;
	//创建对象
	Object ob = "aa";
	//存款
	public void saveMoney(int n){
		synchronized (ob) {
			sumMoney =sumMoney+n;
			System.out.println(Thread.currentThread().getName()+"存入===>"+(n));
			//线程 睡眠
			try {
				Thread.sleep(50);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
	//查询 总金额 
    public void showMoney(){
        System.out.println("账户总金额:"+sumMoney);  
    } 
	//取款
	public void getMoney(int n){
		synchronized (ob) {
			if(sumMoney<=0){  
		           System.out.println("余额不足");  
		    }else{
		    	System.out.println(Thread.currentThread().getName()+"取出===>"+(n));
		    	sumMoney =sumMoney-n;
		    }
			//线程 睡眠
			try {
				Thread.sleep(50);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

class Atm implements Runnable {
	//得到银行对象 调用 方法
	Bank bk = new Bank();
	//取钱
	@Override
	public void run() {
		int money = 100;
		for (int i = 0; i < 3; i++) {
			bk.saveMoney(money);
			bk.showMoney();
		}
	}
}

/**/
class AtmTwo implements Runnable {
	//得到银行对象 调用 方法
	Bank bk = new Bank();
	//取钱
	@Override
	public void run() {
		int money = 100;
		for (int i = 0; i < 3; i++) {
			bk.getMoney(money);
			bk.showMoney();
		}
	}
}



 * 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值