java线程死锁例子
public class DealLockTest implements Runnable {
static String i = new String();
static String j = new String();
private String str = null;
public DealLockTest(String str) {
this.str = str;
}
public static void main(String[] args) {
new Thread(new DealLockTest("i")).start();
new Thread(new DealLockTest("j")).start();
}
public void run() {
if (str.equals("i")) {
synchronized (i) {
System.out.println(Thread.currentThread().getName()+":"+"i");
Thread.yield();
synchronized (j) {
System.out.println("i is over");
}
}
} else {
synchronized (j) {
System.out.println(Thread.currentThread().getName()+":"+"j");
Thread.yield();
synchronized (i) {
System.out.println("j is over");
}
}
}
}
}
线程何时发生死锁呢?
最简单的情况是当1个线程获得了资源A,当它再获得资源B时,就可以完成任务.而在它获得了A的时候
另一个线程获得了资源B,去抢资源A..此时,就发生了死锁
前提(共享资源(static),加锁(synchronized)).
相关文档:
我们每个学期末都会进行将近一个月的实训,这次Java实训也即将结束,我选的课题是“个人网上银行系统”,运用了Struts,Hibernate和Spring框架,通过mvc设计模式。基本所有的功能都实现了,在实训中真的学到了很多知识,之间也遇到了很多问题,但都一一得到解决。我进一步了解了Struts的运行原理,马上面临 ......
import java.util.Scanner;
public class Game{
void welcome(){
println("欢迎来到剪刀石头布游戏");
}
Choice getUserChoice(){
println("请选择\t[1]剪刀\t[2]石头\t[3]布");
Scanner sc= new Scanner(System.in);
int userCh ......
JAVA面试题集- -
基础知识:
1.C++或Java中的异常处理机制的简单原理和应用。
当JAVA程序违反了JAVA的语义规则时,JAVA
虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发
IndexOutOfBoundsException;访问null的对象时会引发NullPointerExcepti ......