JAVA-多线程(关键字:synchronized)
package demo; import java.util.Random; /** * * * @author Weirdo-world * * java 实现多线程程序 * 1)继承Thread类 * 2)实现Runnble接口 * * 通过多线程模拟售票窗口 * 各售票窗口不能售出同一张票 * 打印售出的票号 */ public class Demo5 { public static void main(String[] args) { Demo55 d = new Demo55(); Thread t1 = new Thread(d); t1.setName("一号售票窗口:"); Thread t2 = new Thread(d); t2.setName("二号售票窗口:"); Thread t3 = new Thread(d); t3.setName("三号售票窗口:"); Thread t4 = new Thread(d); t4.setName("四号售票窗口:"); Thread t5 = new Thread(d); t5.setName("五号售票窗口:"); t1.start(); t2.start(); t3.start(); t4.start(); t5.start(); } } class Demo55 implements Runnable { public int ticket = 20; public int num = 0; @Override public void run() { while (ticket > 0) { synchronized (this) { // 同步锁:一个时间内只允许一个线程,另一个必须等待当前线程结束后再执行。(this指的是一个对象) if (ticket > 0) { try { Thread.sleep(new Random().nextInt(1000)); // 休眠时间 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } ticket--; num++; System.out.println(Thread.currentThread().getName() + "当前票号:" + num); } } } } }