双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

Java多线程同步问题求助

qq1212 qq1212 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
下面的代码执行后肯定是有问题的,我希望显示的结果是在赋值前value的值是1,2,3,4....10(顺序乱没关系,但不能重复和漏了),重新赋值后自然都是8888了。搞不定啊搞不定,高手求助

代码如下:

public class ThreadMain {
Map<String,A> m = new HashMap<String, A>();

void putA(A a){
m.put("k", a);
}

void main(A a) {
int i = 10;
while(i > 0) {
B b = new B();
b.setValue(i);
a.setB(b);

R r = new R(m);
Thread t = new Thread(r);
t.start();

i--;
}
}

public static void main(String[] args) {
ThreadMain d = new ThreadMain();
A a = new A();
d.putA(a);
d.main(a);
}
}

class R implements Runnable{
Map<String,A> m;

R(Map<String,A> m){
this.m = m;
}

public void run() {
A a = m.get("k");
System.out.println("before set A.b.value is:"+a.getB().getValue());

B b = new B();
b.setValue(8888);
a.setB(b);

System.out.println("after set A.b.value is:"+a.getB().getValue());
}
}

class A {
private B b;
public B getB() {
return b;
}

public void setB(B b) {
this.b = b;
}
}

class B{
private int value;

public int getValue() {
return value;
}

public void setValue(int value) {
this.value = value;
}
}
...全文

相关推荐

以银行取钱为例模拟Java多线程同步问题完整代码

主要介绍了以银行取钱为例模拟Java多线程同步问题完整代码,具有一定借鉴价值,需要的朋友可以参考下。

weixin_38565221

java实现多线程间的同步与互斥(读者写者问题)

用java实现多线程并发中的读者与写者问题,能够实现多线程对临界资源的同步有序访问。 具体实现为: 给定一个队列A[1-10][1-100000]、元素编号1-10,其中每个元素包含10万个随机数。创建若干个线程,各循环100次;其中10,100个为读线程,10,100个为更新线程。 1. 读线程每次产生随机数三元组:(i, j, k),其中i: [1-10], j: [1-100000],k[j-100000],求取指定A[i]一级数组中第j到第k个元素的均值; 2. 更新线程每次产生一对随机整数三元组 (i, j, k) 和一个随机浮点数d:(0-1),其中i: [1-10], j: [1-100000],k[j-100000],完成对A[i][j]到A[i][k]之间的所有元素进行数值更新,x = x * (1 + d)

木子-勇士心

浅谈Java多线程编程中Boolean常量的同步问题

主要介绍了浅谈Java多线程编程中Boolean常量的同步问题,主要针对线程之间同步了不同的布尔对象的问题,需要的朋友可以参考下

weixin_38546024

Java多线程共享数据、同步、通信

一、线程共享数据   a)继承Thread,那么我们可以创建很多个这样的类,但是每个这样的类都是相互不关联的,也是说我们Thread类中的内容每个创建出来的类都有一份,因此它不适合作为数据共享的线程来操作。同时由于Java继承的性,我们只能继承一个对象。   b)使用runnable可以解决性和不能共享的问题(不是说使用runnable解决了共享问题,只是相对于创建Thread来说,它可以算的上是共享了,为了获得更精确的共享问题,它必须的使用线程同步操作)。实现了runnable接口的类比较适合用作共享数据。   一个测试例子à证明runnable能实现数据共享,thread不能

weixin_38733245

Java多线程按指定顺序同步执行

主要介绍了java多线程如何按指定顺序同步执行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

weixin_38748580
评论 12
收藏 已收藏
分享
返回顶部
qq1212
Java SE 62,621 成员 307,251 内容