网站后台程序怎么做,创建wordpress主题,简历怎么写,昆明做网站哪家公司好前言
利用多线程编程虽然能极大地提升运行效率#xff0c;但是多线程本身的不稳定也会带来一系列的问题#xff0c;其中最经典莫过于售票问题#xff1b;这时就需要人为地加以限制和干涉已解决问题#xff0c;譬如今日之主题——锁定。
锁定是我们在多线程中用来解决售票…前言
利用多线程编程虽然能极大地提升运行效率但是多线程本身的不稳定也会带来一系列的问题其中最经典莫过于售票问题这时就需要人为地加以限制和干涉已解决问题譬如今日之主题——锁定。
锁定是我们在多线程中用来解决售票问题的工具它的作用机制是将业务代码上锁锁定后的区间同一时间只能允许一个线程进入运行在该线程运行结束之前其余线程均不得进入只能在区间外等待。
实现
锁的实现在Java中有三种实现方式以下将逐一展示。
方法一
利用Java提供的lock锁进行锁定
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;class MyThread extends Thread {private static int num 1;private static Lock lock new ReentrantLock();public MyThread(String s) {this.setName(s);}public void run() {while(true) {lock.lock();if(num 31) {System.out.println(this.getName() 售出第 num 张票);num;}lock.unlock();}}
}
方法二
利用syncronized方法进行锁定。
class MyThread extends Thread {private static int num 1;public MyThread(String s) {this.setName(s);}public void run() {while(true) {synchronized(MyThread.class) {if(num 31) {System.out.println(this.getName() 售出第 num 张票);num;}}}}
}
注意
synchronized方法需要一个公共对象作为“锁头”。
方法三
同步方法实现
class MyThread extends Thread {private static int num 1;public MyThread(String s) {this.setName(s);}public void run() {while(true) {if(methood()) break;}}private synchronized boolean methood() {if(num 30) return true;System.out.println(this.getName() 售出第 num 张票);num;return false;}
}