java多线程如何解决同步的安全问题

importjava.util.*;publicclassTest{publicstaticinti=0;publicstaticchar[]b="1234567890"... import java.util.*;
public class Test{
public static int i = 0;
public static char[] b = "1234567890".toCharArray();
public static int len = "1234567890".length();
//public static String[] b;
public static void main(String[] args){
moreProc mp1 = new moreProc();
new Thread(mp1).start();
moreProc mp2 = new moreProc();
new Thread(mp2).start();
}
}
class moreProc implements Runnable {
@Override
public synchronized void run() {
while(Test.i < Test.len){
//System.out.println(Test.i);
prin(Test.i);
Test.i++;
}
try {
// 挂起随机时间
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public synchronized void prin(int i){
System.out.println(Thread.currentThread().getName()+"------"+Test.b[i]);
}

}

输出的结果中却又以下结果:
Thread-0------1
Thread-1------1
请问下该如何解决?
展开
 我来答
TOLOTOLO
2014-01-13 · 超过25用户采纳过TA的回答
知道答主
回答量:101
采纳率:0%
帮助的人:43万
展开全部
你的编程思想还有待进步。

同步的变量或神高派操作不要写在线程里。 你在你的Test里把这些读取,加减,分别封装好念迟,在这些读取,加减的方法上游贺加synchronized 就行了。
匿名用户
2014-01-13
展开全部
理解一下生产者和消费者的这个线程同步例子
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
龙涛02
2014-01-13
知道答主
回答量:6
采纳率:0%
帮助的人:4.6万
展开全部
while(Test.i < Test.len){
/念型/扒纯System.out.println(Test.i);
prin(Test.i++);
// Test.i++;
}
这春高咐样试试
追问
这个可以了!能麻烦解释下吗?
追答
不好意思啊,我也是一知半解,现在也还在学,不过上面这个应该没怎么用上共享数据吧,或者线程同步。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ty662228100
2014-01-13
知道答主
回答量:19
采纳率:0%
帮助的人:2.9万
展开全部
synchronized
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dnblglm
2014-01-13
知道答主
回答量:26
采纳率:0%
帮助的人:3万
展开全部
Test.i++;也封装进prin(int i)方法里试试
更多追问追答
追问
不行,结果还是那样
追答
将prin(int i)方法写进Test,写成静态Test.prin()参数不要了直接用Test.i
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式