Java(89):解决多线程安全—synchronized(2)
2022/1/9 20:08:03
本文主要是介绍Java(89):解决多线程安全—synchronized(2),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
在https://blog.csdn.net/fen_fen/article/details/122392800 遇到线程不安全问题
解决方法:使用synchronized
解析可参考:https://blog.csdn.net/fen_fen/article/details/121466128
1、synchronized代码块,代码示例
package runnable; // 定义一个实现了 Runnable 接口的类 class RunnableTest4 implements Runnable{ private int ticket =10; private boolean flag=true; // 重写run方法,实现自己的业务逻辑 @Override public void run() { int allTicket=ticket; while (flag){ try{ Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } synchronized(this) { if (this.ticket > 0) { System.out.println("票号:" + ticket-- + ",已被售卖,售卖窗口:" + Thread.currentThread().getName()); } else { flag=false; System.out.println(allTicket+"票已被卖完,当前咨询窗口:" + Thread.currentThread().getName()); } } } } } public class RunnableDemo4 { public static void main(String[] args){ //创建Runnable 对象 RunnableTest4 rt=new RunnableTest4(); // 将一个 Runnable对象作为Thread的构造参数 //调用Thread对象的 start 方法,注意不能调用 run 方法 Thread thread1=new Thread(rt,"1号窗口"); Thread thread2=new Thread(rt,"2号窗口"); Thread thread3=new Thread(rt,"3号窗口"); thread1.start(); thread2.start(); thread3.start(); } }
执行结果:
2、synchronized方法代码示例
synchronized void method() {//业务代码}
package runnable; // 定义一个实现了 Runnable 接口的类 class RunnableTest4 implements Runnable{ private int ticket =10; private boolean flag=true; // 重写run方法,实现自己的业务逻辑 @Override public void run() { while (flag){ try{ Thread.sleep(500); sell(); } catch (InterruptedException e) { e.printStackTrace(); } } } synchronized private void sell(){ int allTicket=ticket; if (this.ticket > 0) { System.out.println("票号:" + ticket-- + ",已被售卖,售卖窗口:" + Thread.currentThread().getName()); } else { flag=false; System.out.println(allTicket+"票已被卖完,当前咨询窗口:" + Thread.currentThread().getName()); } } } public class RunnableDemo4 { public static void main(String[] args){ //创建Runnable 对象 RunnableTest4 rt=new RunnableTest4(); // 将一个 Runnable对象作为Thread的构造参数 //调用Thread对象的 start 方法,注意不能调用 run 方法 Thread thread1=new Thread(rt,"1号窗口"); Thread thread2=new Thread(rt,"2号窗口"); Thread thread3=new Thread(rt,"3号窗口"); thread1.start(); thread2.start(); thread3.start(); } }
执行结果:
这篇关于Java(89):解决多线程安全—synchronized(2)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-04TiDB 资源管控的对撞测试以及最佳实践架构
- 2024-07-03万字长文聊聊Web3的组成架构
- 2024-07-02springboot项目无法注册到nacos-icode9专业技术文章分享
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现