黑马程序员技术交流社区
标题:
多线程问题,为什么结果会打印两次,求解答!@!!!
[打印本页]
作者:
wzl100520
时间:
2016-5-27 19:53
标题:
多线程问题,为什么结果会打印两次,求解答!@!!!
public static void main(String[] args) {
/*
* 创建两个线程A和B,,,,
* 运行10次,,,
* 记录A线程的运行次数
*/
Runnable runnable = new Runnable(){
//用来记录线程A的运行次数
int i=0;
//用来控制运行次数
int f=0;
public void run() {
while(true){
synchronized (this) {
//第十次结束方法打印A运行次数
if(f==10){
System.out.println("完毕---A运行了"+i+"次");
return;
}
//等待0.5秒
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
//A线程运行则i+1
if(Thread.currentThread().getName().equals("A")){
i++;
System.out.println("A线程执行运行了,次数+1");
}
//B线程运行,则无动作
if(Thread.currentThread().getName().equals("B")){
System.out.println("B线程执行不做处理");
}
//控制次数
f++;
}
}
}
};
//开启线程A和B
new Thread(runnable,"A").start();
new Thread(runnable,"B").start();
}
运行结果:
A线程执行运行了,次数+1
A线程执行运行了,次数+1
B线程执行不做处理
A线程执行运行了,次数+1
A线程执行运行了,次数+1
A线程执行运行了,次数+1
A线程执行运行了,次数+1
A线程执行运行了,次数+1
B线程执行不做处理
B线程执行不做处理
完毕---A运行了7次
完毕---A运行了7次
提问:为什么结果是完毕运行了两次,,,怎么避免运行两次???
作者:
lifeiwangyue
时间:
2016-5-27 22:51
你的这两个线程都会去执行run方法里面的东西,所以就会出现两次 ,把里面的东西分成两个方法 通过两个rund方法
作者:
wzl100520
时间:
2016-5-30 11:16
lifeiwangyue 发表于 2016-5-27 22:51
你的这两个线程都会去执行run方法里面的东西,所以就会出现两次 ,把里面的东西分成两个方法 通过两个rund ...
谢了,,,,,明白了,,,,
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2