java 多线程开发二


1.判断线程是否启动

/**
 * @author 曹飛龍 
 * 判断线程是否启动
 */
public class Test6 implements Runnable {
	private int count = 5;// 假设当前还有5张票
	@Override
	public void run() {
		while (count > 0) {
			//System.out.println(Thread.currentThread().getName() + "买票" + count);
			count--;
		}
	}
	public static void main(String[] args) {
		Test6 test = new Test6();
		Thread td=new Thread(test,"窗口A");
		System.out.println(td.isAlive());
		td.start();
		System.out.println(td.isAlive());
		
	}
}
// 运行效果:
//false
//true


2.线程的强制执行

执行以下程序可以发现当主线程运行到5的时候主线程等待td 线程执行完之后才能执行

/**
 * @author 曹飛龍 
 * 线程的强制执行
 */
public class Test7 implements Runnable {
	private int count = 15;// 假设当前还有5张票

	@Override
	public void run() {
		while (count > 0) {
			System.out.println(Thread.currentThread().getName() + "买票" + count);
			count--;
		}
	}

	public static void main(String[] args) {
		Test7 test = new Test7();
		Thread td = new Thread(test, "窗口A");
		td.start();
		for (int i = 0; i < 10; i++) {
			System.out.println("main 线程执行---"+i);
			if (i == 5) {
				try {
					td.join();
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			
		}

	}
}
// 运行效果:
//main 线程执行---0
//窗口A买票15
//main 线程执行---1
//窗口A买票14
//main 线程执行---2
//窗口A买票13
//main 线程执行---3
//窗口A买票12
//main 线程执行---4
//窗口A买票11
//main 线程执行---5
//窗口A买票10
//窗口A买票9
//窗口A买票8
//窗口A买票7
//窗口A买票6
//窗口A买票5
//窗口A买票4
//窗口A买票3
//窗口A买票2
//窗口A买票1
//main 线程执行---6
//main 线程执行---7
//main 线程执行---8
//main 线程执行---9


3.线程的休眠

每次打印都间隔一秒钟

/**
 * @author 曹飛龍 
 * 线程的休眠
 */
public class Test8 implements Runnable {
	private int count = 5;// 假设当前还有5张票
	@Override
	public void run() {
		while (count > 0) {
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println(Thread.currentThread().getName() + "买票" + count);
			count--;
		}
	}
	public static void main(String[] args) {
		Test8 test = new Test8();
		Thread td = new Thread(test, "窗口A");
		td.start();
	}
}
// 运行效果:
//窗口A买票5
//窗口A买票4
//窗口A买票3
//窗口A买票2
//窗口A买票1
4.线程的同步

之前我们做的一个用多个线程买票的程序是 发现有一个票被多次卖掉这个时候我们如果用了同步就不会出现那种情况

/**
 * @author 曹飛龍 同步
 */
public class Test11 implements Runnable {
	private int count = 5;// 假设当前还有5张票
	@Override
	public void run() {
		pay();
	}
	//同步synchronized  用这个关键修饰
	public synchronized void pay() {
		while (count > 0) {
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println(Thread.currentThread().getName() + "买票"
					+ count);
			count--;
		}
	}

	public static void main(String[] args) {
		Test11 test = new Test11();
		Thread td = new Thread(test, "窗口A");
		Thread td1 = new Thread(test, "窗口B");
		td1.start();
		td.start();

	}
}
// 运行效果:
//窗口B买票5
//窗口B买票4
//窗口B买票3
//窗口B买票2
//窗口B买票1




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值