public class WindowTest {
public static void main(String[] args) {
//创建三个线程
Ticket t= new Ticket();
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
Thread t3 = new Thread(t);
//分别给三个线程命名
t1.setName("窗口1");
t2.setName("窗口2");
t3.setName("窗口3");
t1.start();
t2.start();
t3.start();
}
}
class Ticket implements Runnable{
/*
* 处理方式2:同步方法:将要处理的共享数据的代码写进一个方法(方法改为synchronized)
*
*
* */
int ticket=1000;
boolean isFlag=true;
@Override
public void run() {
while(isFlag)
{
show();
}
}
public synchronized void show(){//此时同步监视器是this也是唯一
if(ticket>0)
{
System.out.println(Thread.currentThread().getName()+":"+"第"+ticket+"张票售出");
ticket--;
}
else
isFlag=false;
}
}
/*
* 采用继承类实现多线程
* 使用同步方法快解决安全问题synchronized
* 同步监视器慎用this关键看对象是否唯一
*
* */
public class window {
public static void main(String[] args) {
windows w1= new windows();
windows w2= new windows();
windows w3= new windows();
w1.setName("窗口1");
w2.setName("窗口2");
w3.setName("窗口3");
w1.start();
w2.start();
w3.start();
}
}
class windows extends Thread {
static int ticket = 1000;
static boolean isFlag = true;
//static Object obj = new Object();//方式一
public void run() {
while (isFlag)
show();
}
// public synchronized void show(){//此时同步同步监视器this指的是w1,w2,w3
public static synchronized void show() {//此时同步监视器为windows.class
if (ticket > 0) {
System.out.println(Thread.currentThread().getName() + ":" + "第" + ticket + "张票售出");
ticket--;
} else
isFlag = false;
}
}
处理方式2:同步方法:将要处理的共享数据的代码写进一个方法(方法改为synchronized修饰)