首页 > 代码库 > java:同步和死锁
java:同步和死锁
多个线程共享一个资源的时候需要进行同步(否则会出现错误:如负数,重复数),但是过多的同步会造成死锁.
synchronized(this)
{
}
非同步情况:
public class SyncThread implements Runnable { private int titick = 5; @Override public void run() { // TODO 自动生成的方法存根 for(int i = 0; i <50; i++) { if( this.titick > 0 ) { //如果遇到延时情况,就会出错 try { Thread.sleep(300); } catch (InterruptedException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } System.out.println("卖出去第:" + this.titick-- + "张票"); } } } } public class Demo { public static void main(String[] args) { // TODO 自动生成的方法存根 SyncThread st = new SyncThread(); new Thread(st, "票贩子A").start(); new Thread(st, "票贩子B").start(); new Thread(st, "票贩子C").start(); } }
结果:
同步情况:
public class SyncThread2 implements Runnable { private int titict = 5; @Override public void run() { // TODO 自动生成的方法存根 for(int i = 0; i < 50; i++) { synchronized(this) { if( this.titict > 0) { try { Thread.sleep(300); } catch (InterruptedException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } System.out.println("卖出:"+ this.titict--); } } } } } public class Demo2 { public static void main(String[] args) { // TODO 自动生成的方法存根 SyncThread2 sy2 = new SyncThread2(); new Thread(sy2, "票贩子1").start(); new Thread(sy2, "票贩子2").start(); new Thread(sy2, "票贩子3").start(); } }
结果:
java:同步和死锁
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。