java线程死锁问题 野性酷女 2022-07-27 14:48 164阅读 0赞 ## Synchronized关键字 ## Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。 1. 当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。 2. 然而,当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该object中的非synchronized(this)同步代码块。 3. 尤其关键的是,当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对object中所有其它synchronized(this)同步代码块的访问将被阻塞。 4. 第三个例子同样适用其它同步代码块。也就是说,当一个线程访问object的一个synchronized(this)同步代码块时,它就获得了这个object的对象锁。结果,其它线程对该object对象所有同步代码部分的访问都被暂时阻塞。 5. 以上规则对其它对象锁同样适用. ## 代码示例 ## package test160118; public class TestSynchronized { public static void main(String[] args) { Sy sy = new Sy(0); Sy sy2 = new Sy(1); sy.start(); sy2.start(); } } class Sy extends Thread { private int flag ; static Object x1 = new Object(); static Object x2 = new Object(); public Sy(int flag) { this.flag = flag; } @Override public void run() { System.out.println(flag); try { if (flag == 0) { synchronized (x1) { System.out.println(flag+"锁住了x1"); Thread.sleep(1000); synchronized (x2) { System.out.println(flag+"锁住了x2"); } System.out.println(flag+"释放了x1和x2"); } } if(flag == 1) { synchronized (x2) { System.out.println(flag+"锁住了x2"); Thread.sleep(1000); synchronized (x1) { System.out.println(flag+"锁住了x1"); } System.out.println(flag+"释放了x1和x2"); } } } catch (InterruptedException e) { e.printStackTrace(); } } }
相关 Java多线程问题:死锁实例 死锁是多线程编程中的一种严重问题,它发生在两个或更多线程相互等待对方释放资源的情况下,无法继续执行。 下面是一个简单的死锁实例,使用Java的Thread类: ```jav àì夳堔傛蜴生んèń/ 2024年09月05日 21:27/ 0 赞/ 30 阅读
相关 Java多线程问题:死锁案例 死锁是多线程编程中的一种严重问题,当两个或更多的线程因争夺资源而造成的一种互相等待的现象时,就会发生死锁。 下面是一个经典的死锁案例: ```java // 线程1,持有资 柔光的暖阳◎/ 2024年09月05日 19:18/ 0 赞/ 23 阅读
相关 Java多线程问题:死锁示例 死锁在多线程编程中是一个常见的问题。简单来说,当两个或更多的线程相互等待对方释放资源时,就会发生死锁。 以下是一个经典的死锁示例(使用Java的synchronized和wa 爱被打了一巴掌/ 2024年09月05日 17:51/ 0 赞/ 36 阅读
相关 Java多线程问题:死锁示例 在Java中,死锁是一种常见的多线程问题。当两个或更多的线程互相等待对方释放资源时,就会导致死锁。 以下是一个简单的Java死锁示例: ```java // 创建两个互斥的 小鱼儿/ 2024年09月05日 15:45/ 0 赞/ 35 阅读
相关 Java线程死锁 /\ \ 【线程死锁】 \ 原因:两个线程相互等待被对方锁定的资源 \/ 代码模拟: public class DeadLock { 骑猪看日落/ 2022年09月26日 02:18/ 0 赞/ 220 阅读
相关 java线程死锁问题 Synchronized关键字 Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。 1. 当两个并发线程 野性酷女/ 2022年07月27日 14:48/ 0 赞/ 165 阅读
相关 Java——线程死锁 //要避免死锁 //死锁的例子 /class Ticket implements Runnable{ private int 我就是我/ 2022年06月07日 03:51/ 0 赞/ 234 阅读
相关 Java线程死锁 需要避免的与多任务处理有关的特殊错误类型是死锁(deadlock)。死锁发生在当两个线程对一对同步对象有循环依赖关系时。例如,假定一个线程进入了对象X的管程而另一个线程进入了对 悠悠/ 2022年05月20日 00:14/ 0 赞/ 239 阅读
相关 解决线程死锁问题 在编写多线程程序时,必须注意资源的使用问题。如果两个线程(多个线程时情况类似)分别拥有不同的资源,而同时又需要对方释放资源才能继续运行时,就会发生死锁。本实例演示了一种解决死锁 旧城等待,/ 2022年04月11日 13:20/ 0 赞/ 229 阅读
还没有评论,来说两句吧...