public class Test implements Runnable { public int flag = 1; static Object o1 = new Object(), o2 = new Object(); public void run() { System.out.println("flag=" + flag); if(flag == 1) { synchronized(o1) { try { Thread.sleep(500); } catch (Exception e) { e.printStackTrace(); } synchronized(o2) { System.out.println("1"); } } } if(flag == 0) { synchronized(o2) { try { Thread.sleep(500); } catch (Exception e) { e.printStackTrace(); } synchronized(o1) { System.out.println("0"); } } } }
public static void main(String[] args) { Test td1 = new Test(); Test td2 = new Test(); td1.flag = 1; td2.flag = 0; Thread t1 = new Thread(td1); Thread t2 = new Thread(td2); t1.start(); t2.start();
看了这个博客 你就知道原来线程不安全 是这么简单
随便写一个都是线程不安全的
接下来你只要在满足同步要求的时候不使用锁机制,那么这个代码就已经错了,除非你可以用其他的方式来避免同步
1.a读x
2.b读x
3.a写x
4.b写x最后结果x只+1,这就是线程不安全。线程安全的做法是a或者b读写之间不能有其他人来访问这个数据。
static int allval=49;
//
public void run() {
allval++;
try {
Thread.sleep(0);
System.out.println("allval 的值为:"+allval);
}
catch (InterruptedException ie) {
ie.printStackTrace();
}
}
public static void main(String[] args) {
Thread t1=new Thread (new TestUnsafeThread());
Thread t2=new Thread (new TestUnsafeThread());
t1.start();
t2.start();
}}
执行结果有两种不同的 50 51 或 51 51这就是一种线程不安全的情况吧! 坦白的说 我也没有太弄懂,继续研究吧!
public class Test implements Runnable {
public int flag = 1;
static Object o1 = new Object(), o2 = new Object();
public void run() {
System.out.println("flag=" + flag);
if(flag == 1) {
synchronized(o1) {
try {
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
}
synchronized(o2) {
System.out.println("1");
}
}
}
if(flag == 0) {
synchronized(o2) {
try {
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
}
synchronized(o1) {
System.out.println("0");
}
}
}
}
public static void main(String[] args) {
Test td1 = new Test();
Test td2 = new Test();
td1.flag = 1;
td2.flag = 0;
Thread t1 = new Thread(td1);
Thread t2 = new Thread(td2);
t1.start();
t2.start();
}
}"随便什么例子" 就随便给你一吧,不知道是不是你想要的
这是个死锁的问题