继承自 Thread类
public class Thread_ extends Thread{
private static Object obj=new Object();
private static int tickets=100;
@Override
public void run(){
while(true) {
synchronized (obj) {
if (tickets > 0) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "第" + (tickets--) + "张票卖出");
} else {
break;
}
}
}
}
public static void main(String[] args) {
Thread_ t1=new Thread_();
Thread_ t2=new Thread_();
Thread_ t3=new Thread_();
Thread_ t4=new Thread_();
t1.setName("a");
t2.setName("b");
t3.setName("c");
t4.setName("d");
t1.start();
t2.start();
t3.start();
t4.start();
}
}
继承自Runnable接口
public class Synchronized_ implements Runnable{
private String name;
private Object obj=new Object();
private int tickets=100;
public void run(){
while(true) {
synchronized (obj) {
if (tickets > 0) {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "第" + (tickets--) + "张票卖出");
} else {
break;
}
}
}
}
public static void main(String[] args) {
Synchronized_ w=new Synchronized_(); //需要共同操作的的数据需要放在 同步代码块中 最后要实现的是 只要创建一个对象 来开辟多个线程对数据及逆行操作
Thread t1=new Thread(w);
Thread t2=new Thread(w);
Thread t3=new Thread(w);
Thread t4=new Thread(w);
t1.start();
t2.start();
t3.start();
t4.start();
//每个对象都有一把锁 任何类的对象都可以充当同步监听器
}
}