线程的是实现有两种方法:
1: 实现接口: Runnable
2 : 继承类 : Thread
每一个对象都有一个监视器,或者叫做锁。
当线程执行到synchronized的时候,检查传入的实参对象,并得到该对象的锁旗标。如果得不到,那么此线程就会被加入到一个与该对象的锁旗标相关联的等待线程池中,一直等到对象的锁旗标被归还,池中的等待线程就会得到该锁旗标,然后继续执行下去。当线程执行完成同步代码块,就会自动释放它占有的同步对象的锁旗标。一个用于synchronized语句中的对象称为监视器,当一个线程获得了synchronized(object)语句中的代码块的执行权,即意味着它锁定了监视器。
举一个死锁的例子:
public class A
{
synchronized void foo(B b)
{
System.out.println("method in a.foo ;thread name is "+Thread.currentThread().getName());
try{
Thread.sleep(1);
}catch(Exception e)
{
e.printStackTrace();
}
System.out.println("try to call b.last");
b.last();
}
synchronized void last()
{
System.out.println("method in a.last");
}
}
class B
{
synchronized void bar(A a)
{
System.out.println("method in B.BAR ;thread name is "+Thread.currentThread().getName());
try{
Thread.sleep(1);
}catch(Exception e)
{
e.printStackTrace();
}
System.out.println("try to call a.last");
a.last();
}
synchronized void last()
{
System.out.println("method in b.last");
}
}
public class main implements Runnable
{
A a = new A();
B b = new B();
main()
{
Thread.currentThread().setName("MainThread");
new Thread(this).start();
System.out.println("track after start");
a.foo(b);
System.out.println("back in main thread");
}
public void run()
{
System.out.println("track in run");
Thread.currentThread().setName("RacingThread");
b.bar(a);
System.out.println("back in other thread");
}
public static void main(String args[])
{
new main();
}
}
运行结果是:
造成死锁,相互锁定对象!
分享到:
相关推荐
java多线程及死锁
明白死锁产生的原因,在程序中演示死锁产生并从而实现多线程陈旭解决死锁(deadlock)这一类问题。
基于java的开发源码-多线程程序死锁检查 JCarder.zip 基于java的开发源码-多线程程序死锁检查 JCarder.zip 基于java的开发源码-多线程程序死锁检查 JCarder.zip 基于java的开发源码-多线程程序死锁检查 JCarder.zip ...
java多线程死锁预防机制研究,java多线程死锁预防机制研究
Java多线程程序死锁检查 JCarder
死锁问题,java多线程死锁
Java多线程程序死锁检查 JCarder.7z
DllMain和多线程死锁[归类].pdf
本文首先介绍了线程的有关概念,接着介绍了线程的生命期及其状态间的转换,多线程的调度 原则,线程的死锁,详细阐述了多线程的两种实现方法: 由Thread类派生子类;实现Runnable接口
基于Java的多线程程序死锁检查 JCarder.zip
基于java的多线程程序死锁检查 JCarder.zip
基于Java的源码-多线程程序死锁检查 JCarder.zip
java源码:Java多线程程序死锁检查 JCarder.zip
基于Java的实例源码-多线程程序死锁检查 JCarder.zip
实测有效的一个c++检测线程死锁的解决方法(实现和测试代码) 原创实测有效的一个c++检测线程死锁的解决方法,已应用于项目,实测有效 原创文章地址:https://blog.csdn.net/liaozhilong88/article/details/80354414...
一个简单有效的即时检测线程死锁的方法(附c++源代码) 原文链接:https://blog.csdn.net/liaozhilong88/article/details/80354414 原链接是windows下实现,这份代码以pthread简单实现跨平台 感谢原博主分享
Linux系统线程死锁实验报告.pdf
本资源为多线程中,多线程共享资源,出现死锁的情况。浅显易懂
源码—Java多线程5—死锁和wait notify notifyAll
多线程死锁,活锁,竞争锁问题总结。举例分析产生各种锁的原因以及解决方法