java线程死锁问题
来源:互联网 发布:php输出中文乱码 编辑:程序博客网 时间:2024/05/29 21:29
Synchronized关键字
Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。
- 当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。
- 然而,当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该object中的非synchronized(this)同步代码块。
- 尤其关键的是,当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对object中所有其它synchronized(this)同步代码块的访问将被阻塞。
- 第三个例子同样适用其它同步代码块。也就是说,当一个线程访问object的一个synchronized(this)同步代码块时,它就获得了这个object的对象锁。结果,其它线程对该object对象所有同步代码部分的访问都被暂时阻塞。
- 以上规则对其它对象锁同样适用.
代码示例
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(); } }}
0 0
- java线程死锁问题
- java线程死锁问题
- java线程同步之死锁问题
- java线程理解之死锁问题
- java线程死锁问题案列
- java线程安全之死锁问题
- 【java并发】线程技术之死锁问题
- Java模拟排查线程死锁问题
- Java中线程同步和线程死锁问题
- java中线程同步(线程安全)与死锁问题
- 线程中的死锁问题
- 线程死锁问题
- 线程死锁问题
- 线程死锁问题
- 线程死锁问题
- 线程死锁问题
- 线程死锁的问题
- 线程-模拟死锁问题
- 51nod--1134 最长递增子序列 (动态规划)
- SpringMVC之application-context.xml,了解数据库相关配置
- C# 编写计算器
- C++扬帆远航——12(抓小偷)
- C++ 阶乘
- java线程死锁问题
- Ajax学习笔记
- Biorhythms
- 常用的Git代码托管平台
- HashSet,TreeSet和LinkedHashSet的区别
- nginx一个fastcgi的demo错误
- Android Fragment 真正的完全解析(上)
- PAT (Advanced Level) Practise 1074 Reversing Linked List (25)
- android 之View 一