Java多线程处理例子
编写一个Java 多线程程序,完成三个售票窗口同时出售20张票(如下图所示);
程序分析:1.票数要使用同一个静态值;
2.为保证不会出现卖出同一个票,要 Java 多线程同步锁。
设计思路:1.创建一个站台类Station,继承Thread或者实现 Runnable 接口,重写run方法,在run方法里面执行售票操作!售票要使用同步锁:即有一个站台卖这张票时,其他站台要等这张票卖完!
实现代码
package multithread;
public class MultiThreadExample1 {
static class Station implements Runnable {
Object lock = new Object();
static int ticket = 0;
final static int MAX_TICKETS = 20;
static int threadNums = 0;
public Station() {
++threadNums;
}
public void sell() {
synchronized (lock) {
while (ticket < MAX_TICKETS) {
System.out.println(
String.format(" The %d ticket is sold by %s", ++ticket, Thread.currentThread().getName()));
}
//确保在最后一句打印
if(++ticket == MAX_TICKETS + threadNums)
System.out.println("It is sold out");
}
}
@Override
public void run(){
sell();
}
}
public static void main(String[] args) {
Thread first = new Thread(new Station(),"FirstWindow");
Thread second = new Thread(new Station(),"SecondWindow");
Thread third = new Thread(new Station(),"ThirdWindow");
first.start();
second.start();
third.start();
}
}
总结:
如果不进行控制,调度有一定的随机性。所以要实现本实验的结果,需要对卖票操作加上同步锁。