线程同步的三种实现方式
来源:互联网 发布:阿里云 上海节点 编辑:程序博客网 时间:2024/06/05 03:52
java线程的同步问题可以通过三种方式实现:
首先创建四个线程:
public class Test01 {public static void main(String[] args) {//创建接口实现类实例化对象Runnable r1 = new TicketRunnableImpl();//创建线程Thread t1 = new Thread(r1, "窗口一");Thread t2 = new Thread(r1, "窗口二");Thread t3 = new Thread(r1, "窗口三");Thread t4 = new Thread(r1, "窗口四");//启动线程t1.start();t2.start();t3.start();t4.start();}}
实现方式一:使用synchronized代码块
public class TicketRunnableImpl implements Runnable{private int ticketNum = 1000;@Overridepublic void run() {while (ticketNum > 0) {//同步代码块synchronized (this) {//判断if (ticketNum > 0) {ticketNum--;System.out.println(Thread.currentThread().getName() + "售出一张票,剩余:" + ticketNum);try {Thread.sleep(10);} catch (InterruptedException e) {e.printStackTrace();}}}}}}实现方式二:使用对象锁
import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class TicketRunnableImpl implements Runnable{private int ticketNum = 1000;//创建锁对象Lock lock = new ReentrantLock();@Overridepublic void run() {while (ticketNum > 0) {//上锁lock.lock();//判断if (ticketNum > 0) {ticketNum--;System.out.println(Thread.currentThread().getName() + "售出一张票,剩余:" + ticketNum);try {Thread.sleep(10);} catch (InterruptedException e) {e.printStackTrace();}}//解锁lock.unlock();}}}实现方式三:使用同步方法
public class TicketRunnableImpl implements Runnable{private int ticketNum = 1000;@Overridepublic void run() {while (ticketNum > 0) {sellTickets();}}//同步方法public synchronized void sellTickets() {//判断if (ticketNum > 0) {ticketNum--;System.out.println(Thread.currentThread().getName() + "售出一张票,剩余:" + ticketNum);try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}}}}
阅读全文
0 0
- 线程同步的三种实现方式
- 三种线程同步方式的比较
- 线程同步的三种方式
- 线程同步三种方式
- 三种线程同步方式
- 实现线程同步的几种方式
- 实现线程同步的几种方式
- 实现线程同步的几种方式
- 实现线程同步的方式
- 多线程编程中 线程同步的三种方式
- IOS 多线程,线程同步的三种方式
- IOS 多线程,线程同步的三种方式
- java线程的三种实现方式
- 线程实现的三种方式
- Java线程实现的三种方式
- java线程实现的三种方式
- 线程的三种实现方式
- java多线程三种方式区别,java多线程,线程同步方式,线程同步加锁的方法,wait与sleep区别
- 谷歌确立AI first战略一年,成果如何?
- Hello world!
- 想贴AI标签不知道从何下手?先做好这5点就够了
- 纹理(讲得比较详细的文章)
- 程序员逆天改命之千代门
- 线程同步的三种实现方式
- 互联网分析指标相关学习笔记(1)
- window10启动服务,提示"MSVCR120.DLL文件缺失"
- ios 启动分享到其它应用
- Servlet监听器案例
- 自定义view之绘画五角星
- 【Scikit-Learn 中文文档】密度估计
- javascript调试技巧
- 线性表_顺序存储结构和链式存储结构的优缺点比较(区别)