求线程不安全的例子

一头头 2009-10-03 12:35:37
求线程不安全的例子或者说没哟同步 随便什么例子
只要线程不安全也就是错误的代码

谢谢
...全文
266 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
sforiz 2009-10-05
  • 打赏
  • 举报
回复
死锁、、、
AldisZhan 2009-10-03
  • 打赏
  • 举报
回复
http://blog.csdn.net/mabaolin/archive/2007/06/15/1653178.aspx
看了这个博客 你就知道原来线程不安全 是这么简单
随便写一个都是线程不安全的
java1109 2009-10-03
  • 打赏
  • 举报
回复
学习
舷Kelvin 2009-10-03
  • 打赏
  • 举报
回复
比如一个数据,x

a和b的作用都是使x+1.他们要读了x的数值,然后计算,再把结果覆盖掉原x值

步骤:
1.a读x
2.b读x
3.a写x
4.b写x

最后结果x只+1,这就是线程不安全。

线程安全的做法是a或者b读写之间不能有其他人来访问这个数据。
  • 打赏
  • 举报
回复
这个例子在《Java 核心技术》上面就有,作者是以一个转账的例子来说明局部变量是如何被侵蚀掉的。
feishare 2009-10-03
  • 打赏
  • 举报
回复
Collection的遍历
loveofmylife 2009-10-03
  • 打赏
  • 举报
回复
Brian同步规则:如果你正在写一个变量,它可能在接下来被另一个线程读取,或者正在读取一个上一次已经被一个线程写过的变量,那么你就必须使用同步,并且,读写线程都必须使用相同的监视器锁同步

接下来你只要在满足同步要求的时候不使用锁机制,那么这个代码就已经错了,除非你可以用其他的方式来避免同步
leafsoar 2009-10-03
  • 打赏
  • 举报
回复

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();

}
}

"随便什么例子" 就随便给你一吧,不知道是不是你想要的
这是个死锁的问题
haojia0716 2009-10-03
  • 打赏
  • 举报
回复
单例模式
lulu0126 2009-10-03
  • 打赏
  • 举报
回复


public class TestUnsafeThread extends Thread{

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

这就是一种线程不安全的情况吧!

坦白的说 我也没有太弄懂,继续研究吧!
liuc0317 2009-10-03
  • 打赏
  • 举报
回复
线程不安全!就是说:不同的方法操作同一个变量!
「已注销」 2009-10-03
  • 打赏
  • 举报
回复
线程异步编程,就是不安全了, 进来没搞这个, 忘了差不多了!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧