建设银行网站号设计师网上接单的网站
web/
2025/10/3 23:30:28/
文章来源:
建设银行网站号,设计师网上接单的网站,wordpress 修改首页,外贸人才网招聘网在单线程程序中#xff0c;每次只做一件事情#xff0c;后面的事情需要等待前面这件事情完成才可以进行
如果是多线程程序#xff0c;这件事情还没做完就又做另外一件事情#xff0c;这就可能发生两个线程抢占资源的问题
例如#xff1a;a与b两个人都要去洗手间#xf…在单线程程序中每次只做一件事情后面的事情需要等待前面这件事情完成才可以进行
如果是多线程程序这件事情还没做完就又做另外一件事情这就可能发生两个线程抢占资源的问题
例如a与b两个人都要去洗手间洗手间只有一个位置a还没出来b就已经进去了这就很尴尬。。。
Java提供了线程同步的机制来防止资源访问的冲突实际上线程安全问题来源于多个线程同时对同一对象的操作
例如下面的代码是火车票的售票功能当票数小于等于0时停止售票
package java18;
public class ThreadSafe implements Runnable{ int num 10; Override public void run() { while(true) { if(num0) { try { Thread.sleep(100); }catch(Exception e) { e.printStackTrace(); } System.out.println(ticketsnum--); } } } public static void main(String[] args) { ThreadSafe t new ThreadSafe(); Thread tA new Thread(t); Thread tB new Thread(t); Thread tC new Thread(t); Thread tD new Thread(t); tA.start(); tB.start(); tC.start(); tD.start(); }
} 这个代码运行后输出的票数num会出现负数-1-2这是为什么呢
原因在此:,例如现在num为1当tA执行时观察到num0售出票执行sleep还没有来得及对num进行自减操作tB发现num现在是1于是也执行售出票的操作这就剩一张票却卖出了两次出现了问题。
那么有什么办法解决这个问题呢Java中提供了同步机制
例如a与b现在又去这个洗手间a进去以后把门给锁了b想进去也打不开门只能等a出来再进去
package java18;
public class ThreadSafe implements Runnable{ int num 10; Override public void run() { while(true) { synchronized(){if(num0) { try { Thread.sleep(100); }catch(Exception e) { e.printStackTrace(); } System.out.println(ticketsnum--); } }} } public static void main(String[] args) { ThreadSafe t new ThreadSafe(); Thread tA new Thread(t); Thread tB new Thread(t); Thread tC new Thread(t); Thread tD new Thread(t); tA.start(); tB.start(); tC.start(); tD.start(); }
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/86472.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!