方法锁
方法锁(同步监视器)
-
第一种情况:实现接口Runnable方法
代码块锁synchronized的this指的是同一个demo012;
package com.Thread;
public class Demo012 implements Runnable {
int ticket = 10;
@Override
public void run() {
int ti = 1;
Lock();
}
public synchronized void Lock(){
for (int people = 100; people > 0; people--) {
//做一个实时线程监控器;锁定一个代码块;防止多线程争夺一个资源
//这个this指调用他的对象demo012
if (ticket > 0) {
System.out.println("我抢到了第" + ticket-- + "张票;从" + Thread.currentThread().getName() + "窗口");
}
}
}
}
package com.Thread;
public class Demo011 {
public static void main(String[] args) {
Demo012 demo012 = new Demo012();
Thread thread = new Thread(demo012,"1号");
thread.start();
Thread thread2 = new Thread(demo012,"2号");
thread2.start();
Thread thread3 = new Thread(demo012,"3号");
thread3.start();
}
}
-
第二种情况:继承方法Thread方法
这里,我们用到字节码文件来锁定监视对应的线程
package com.Thread;
public class TrainTicket extends Thread{
static int trainticket =10;
public TrainTicket(String name) {
super(name);
}
public void run() {
//做一个线程同步监视器;this一个代码块有3个对象;这里TrainTicket的字节码唯一性
Lock();//方法提取
//有100人在抢票synchronized(TrainTicket.class){
}
public static synchronized void Lock(){
for(int i = 1;i<=100;i++){
if(trainticket>0){
System.out.println("我抢到了火车票;第"+trainticket--+"张;从"+Thread.currentThread().getName()+"窗口");
}
}
}
}
package com.Thread;
public class Demo001 {
public static void main(String[] args) {
TrainTicket trainTicket1 = new TrainTicket("1号");
trainTicket1.start();
TrainTicket trainTicket2 = new TrainTicket("2号");
trainTicket2.start();
TrainTicket trainTicket3 = new TrainTicket("3号");
trainTicket3.start();
}
}

浙公网安备 33010602011771号