首页 > 其他分享 >如何解决多线程安全问题一

如何解决多线程安全问题一

时间:2022-11-12 15:44:55浏览次数:42  
标签:同步 Thread 安全 线程 解决 new ticket 多线程

package deep;
//问题:出现重票和错票(即线程安全问题)
//原因:某个线程操作车票的过程中,未完成时其它线程就参与进来,也操作
//如何解决:a操作完才允许其它线程加入
//在java中通过同步机制


/*一、同步代码块
synchornized(同步监视器){
需要被同步的代码(操作共享数据的代码)
}
1.共享数据为多个线程共同操作的变量 如ticket
2.同步监视器:俗称锁,任何一个类的对象
要求:多个线程必须共用同一把锁
   补充:在实现Runnable接口创建多线程,可以考虑用this来充当同步监视器
   在继承Thread类创建多线程时,最好不用this,可以考虑使用当前类充当监视器
*/
class Window1 implements Runnable {
private int ticket = 100;
private static Object obj = new Object();
//线程里跑的东西
public void run() {
while (true) {
synchronized (obj) { //也可以使用Window.class 类可以作为一个对象出现
if (ticket > 0) {

try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ":卖票:票号为:" + ticket);
ticket--;
} else {
break;
}

}
}
}
}

public class WindowTest1 {
public static void main(String[] args) {
Window1 w = new Window1(); //创建一个对象

Thread t1 = new Thread(w); //三个构造器使用同一个对象
Thread t2 = new Thread(w);
Thread t3 = new Thread(w);

t1.setName("窗口1");
t2.setName("窗口2");
t3.setName("窗口3");

t1.start();
t2.start();
t3.start();
}
}

标签:同步,Thread,安全,线程,解决,new,ticket,多线程
From: https://www.cnblogs.com/liujy2233/p/16883909.html

相关文章

  • Win10无法登录微软账号错误代码0x80190001的解决方法
    和控制面板内的“Internet选项”设置有关。进入“Internet选项”的“高级”选项卡。检查“HTTP”设置,不要勾选使用代理使用http;检查“安全”设置,勾选使用TLS1.2。如果仍......
  • 【lwip】12-一文解决TCP原理
    目录前言12.1TCP协议简介12.2TCP相关的一些概念词12.2.1MSL12.2.2MSS12.3TCP工作特性12.3.1面向连接12.3.2全双工通信12.3.3可靠性12.3.4缓冲机制12.3.5拥塞控制......
  • 20221112 - Find Device closed unexpectedly 问题解决
    问题现象:小米手机屏幕下方每隔2秒弹出 FindDeviceclosedunexpectedly问题解决:备份数据;并恢复出厂设置(开机前,按住音量键上或下+开机键)。备注:也尝试了一些网上的说法......
  • 导出的喜马拉雅音频放在播放器上听不了,一个音频下载小工具轻松解决
    我们的播放器上一般能识别的都是兼容的mp3格式,这一点好多朋友都不知道,所以直接将喜马拉雅上导出的音频资料放在自己的播放器上,结果却因为格式不对听不了,一时之间难住了。结......
  • Js进行base64编码解码(解决中文乱码)
    常规方法:编码//base64转字符串getEncode64(str){//对字符串进行编码varencode=encodeURI(str);//对编码的字符串转化base64varbase64=......
  • Java多线程中锁的理解与使用
    参考:https://blog.csdn.net/tyyj90/article/details/782360531.简介锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如synchronized和ReentrantLock等)......
  • 麒麟信安携手 openEuler 支撑国家电网首批数字换流站试点项目安全高效运行
    近日,采用麒麟信安操作系统和华为泰山系列服务器的国网宁夏电力灵州数字换流站投入试运行,标志着我国首批数字换流站核心系统进一步实现自主创新。据悉,数字换流站是通过融合......
  • Redis数据库安全之旅
    前言​​Redis​​相信大家都或多或少都听说过吧,作为内存数据库的代表,但是近些年​​Redis​​ 被攻击的典范也是越来越多,我们将如何防护​​Redis​​ 安全呢?跟着......
  • eclipse打开时候,发现之前的一些工程项目不见了的解决方法
    emm,最近在学习安装STS,一个springboot的插件,谁觉这个行业变化之迅速,不多学点东西,怎么混得下去(委屈),本来eclipse好好的,所以就倒腾了一番。安装插件没有安装成功,倒是eclipse默......
  • 11. 跨域怎么解决
    首先,跨域分为开发环境和生产环境的跨域,我们在开发环境可以使用proxy代理给target设置请求接口地址,以前使用的是jsonp跨域;生产环境使用Nginx反向代理; 延申问......