如题,要求简单易懂,不要长篇大论的转载。
解决方案 »
- 动态博弈的小程序(本人菜鸟,初次发贴向大家请教问题,请多关照!)
- lucene+heritrix day1
- NoClassDefFoundError错误,我在JSP中调用这个方法可以执行,但是用java命令来执行就出现了这个错误,不知奥什么原因
- SGIP收发短信的socket问题
- 不使用现成DOM等开源jar包,用纯java类解析xml文件,谁能写出来帮个忙,急用!
- 请问在java 中怎么执行一个.bat文件,急,在线等,谢谢
- *****求java日历程序*****在线等,
- 一个小循环,不知道怎么写?
- 怎样从键盘上输入一个长度为20的字符窜(数组)?
- RandomAccessFile的问题
- java小问题
- 错误!!!
没本事自己写public class Deadlock {
static class Friend {
private final String name;
public Friend(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public synchronized void bow(Friend bower) {
System.out.format("%s: %s has bowed to me!%n",
this.name, bower.getName());
bower.bowBack(this);
}
public synchronized void bowBack(Friend bower) {
System.out.format("%s: %s has bowed back to me!%n",
this.name, bower.getName());
}
} public static void main(String[] args) {
final Friend alphonse = new Friend("Alphonse");
final Friend gaston = new Friend("Gaston");
new Thread(new Runnable() {
public void run() { alphonse.bow(gaston); }
}).start();
new Thread(new Runnable() {
public void run() { gaston.bow(alphonse); }
}).start();
}
}
不会有死锁的代码:import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.Random;public class Safelock {
static class Friend {
private final String name;
private final Lock lock = new ReentrantLock(); public Friend(String name) {
this.name = name;
} public String getName() {
return this.name;
} public boolean impendingBow(Friend bower) {
Boolean myLock = false;
Boolean yourLock = false;
try {
myLock = lock.tryLock();
yourLock = bower.lock.tryLock();
} finally {
if (! (myLock && yourLock)) {
if (myLock) {
lock.unlock();
}
if (yourLock) {
bower.lock.unlock();
}
}
}
return myLock && yourLock;
}
public void bow(Friend bower) {
if (impendingBow(bower)) {
try {
System.out.format("%s: %s has bowed to me!%n",
this.name, bower.getName());
bower.bowBack(this);
} finally {
lock.unlock();
bower.lock.unlock();
}
} else {
System.out.format("%s: %s started to bow to me, but" +
" saw that I was already bowing to him.%n",
this.name, bower.getName());
}
} public void bowBack(Friend bower) {
System.out.format("%s: %s has bowed back to me!%n",
this.name, bower.getName());
}
} static class BowLoop implements Runnable {
private Friend bower;
private Friend bowee; public BowLoop(Friend bower, Friend bowee) {
this.bower = bower;
this.bowee = bowee;
}
public void run() {
Random random = new Random();
for (;;) {
try {
Thread.sleep(random.nextInt(10));
} catch (InterruptedException e) {}
bowee.bow(bower);
}
}
}
public static void main(String[] args) {
final Friend alphonse = new Friend("Alphonse");
final Friend gaston = new Friend("Gaston");
new Thread(new BowLoop(alphonse, gaston)).start();
new Thread(new BowLoop(gaston, alphonse)).start();
}
}
* @author bzwm
*
*/
public class Deadlock {
public static void main(String args[])
{
final ThreadImp imp = new ThreadImp();
//启动线程执行method1
new Thread(new Runnable() {
public void run() {
imp.method1();
}
}).start(); //启动线程执行method2
new Thread(new Runnable() {
public void run() {
imp.method2();
}
}).start(); }
}class ThreadImp
{
private Object lock1 = new Object();
private Object lock2 = new Object();
public void method1()
{
System.out.println("---Method1 需要lock1锁---");
synchronized (lock1)
{
System.out.println("---Method1 获得lock1锁---");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("method1睡好了,准备执行invokeByMethod1");
invokeByMethod1();
}
System.out.println("---Method1 释放lock1锁---");
}
private void invokeByMethod1()
{
System.out.println("---invokeByMethod1 需要lock2锁---");
synchronized (lock2)
{
System.out.println("invokeByMethod1获得lock2锁,准备执行method2");
}
System.out.println("---invokeByMethod1 释放lock2锁---");
}
public void method2()
{
System.out.println("###Method2 需要lock2锁###");
synchronized (lock2)
{
System.out.println("###Method2 获得lock2锁###");
System.out.println("method2获得lock2锁,然后执行invokeByMethod2");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
invokeByMethod2();
}
System.out.println("###Method2 释放lock2锁###");
}
private void invokeByMethod2()
{
System.out.println("---invokeByMethod2 需要lock1锁---");
synchronized (lock1)
{
System.out.println("invokeByMethod2获得lock1锁");
}
System.out.println("---invokeByMethod2 释放lock1锁---");
}
}