线程安全性的概念
当多个线程访问某个类时,不管运行时环境才去何种调用方式,这些线程如何交替执行,并且在主调代码中不需要做额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的。
对象锁和类锁的概念
对象锁:是用在对象的实例方法上,或者是对一个对象进行加锁。
类锁:是对类里面的静态方法加锁,或者是用在一个类的.class对象上。
死锁的示例代码
public class LockDeath{
private static Object ob1 = new Object();
private static Object ob2 = new Object();
public static void main(String []args) {
Thread th1 = new Thread(new Runnable() {
@Override
public void run() {
synchronized (ob1) {
System.out.println("ob1 lock");
try {
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
synchronized (ob2) {
System.out.println("ob2 lock");
}
}
}
});
Thread th2 = new Thread(new Runnable() {
@Override
public void run() {
synchronized (ob2) {
System.out.println("ob2 lock");
try {
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
synchronized (ob1) {
System.out.println("ob1 lock");
}
}
}
});
th1.start();
th2.start();
}
}
网友评论