由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Java版 - 线程问题。
相关主题
问个Thread 的问题,java certificate里的请问一个语法问题
what is the use of thread.yield()?请教一个java多线程的概念问题
一道java题请教个garbage collector问题
ZT: 关于性爱的多线程问题研究(一)问一个SCJP 题目
能这么 create thread 吗?can applet implements runnable?
implements runable 和 extends threadRe: How to showStatus in Applet?
另一个入门问题。FrameWork of Thread application 1
好虫,exploit等大牛请进--关于htmlunitRe: connection pool
相关话题的讨论汇总
话题: nogo话题: int话题: 线程话题: void话题: runnable
进入Java版参与讨论
1 (共1页)
s*****o
发帖数: 76
1
高手帮我看看下面这段程序是怎么运行的?我怎么也想不出来
为什么结果是15 21。thx.
class NoGo implements Runnable {
private int i;
public void run() {
if (i%10 != 0) {
i++;
}
for(int x=0; x<10; x++, i++)
{
if (x == 4) {
Thread.yield();
}
}
System.out.print(i + " ");
}
public static void main(String [] args) {
NoGo n = new NoGo();
for(int x=0; x<2; x++) {
new Thread(n).start();
}
}
}
b*********u
发帖数: 471
2
what output are you expecting?
I think the output is nondeterministic due to data race.

【在 s*****o 的大作中提到】
: 高手帮我看看下面这段程序是怎么运行的?我怎么也想不出来
: 为什么结果是15 21。thx.
: class NoGo implements Runnable {
: private int i;
: public void run() {
: if (i%10 != 0) {
: i++;
: }
: for(int x=0; x<10; x++, i++)
: {

B*********h
发帖数: 800
3
两个Thread,一个Runnable.
线程1:i == 0 after if{...}, i == 4 in for {...}before yielding.
线程2:i == 5 after if{...}, i == 10 in for{...}before yielding.
线程1:i == 10 after if{...}, i == 15 after for{...} completes. print 15.
线程2:i == 16 after if{...}, i == 21 after for{...} completes. print 21.
但是你并不能确定每次都能以这样的次序运行,这只是可能的运行次序的一种。就算你
不主动yield,还是有可能yield给其他的线程,只是这样简单的代码,这种可能性较小。

【在 s*****o 的大作中提到】
: 高手帮我看看下面这段程序是怎么运行的?我怎么也想不出来
: 为什么结果是15 21。thx.
: class NoGo implements Runnable {
: private int i;
: public void run() {
: if (i%10 != 0) {
: i++;
: }
: for(int x=0; x<10; x++, i++)
: {

s*****o
发帖数: 76
4
搞明白了,多谢。

小。

【在 B*********h 的大作中提到】
: 两个Thread,一个Runnable.
: 线程1:i == 0 after if{...}, i == 4 in for {...}before yielding.
: 线程2:i == 5 after if{...}, i == 10 in for{...}before yielding.
: 线程1:i == 10 after if{...}, i == 15 after for{...} completes. print 15.
: 线程2:i == 16 after if{...}, i == 21 after for{...} completes. print 21.
: 但是你并不能确定每次都能以这样的次序运行,这只是可能的运行次序的一种。就算你
: 不主动yield,还是有可能yield给其他的线程,只是这样简单的代码,这种可能性较小。

1 (共1页)
进入Java版参与讨论
相关主题
Re: connection pool能这么 create thread 吗?
●●●●紧急求助JAVA初级问题,今天project due●●●●implements runable 和 extends thread
Can Java thread return a value?另一个入门问题。
几个问题好虫,exploit等大牛请进--关于htmlunit
问个Thread 的问题,java certificate里的请问一个语法问题
what is the use of thread.yield()?请教一个java多线程的概念问题
一道java题请教个garbage collector问题
ZT: 关于性爱的多线程问题研究(一)问一个SCJP 题目
相关话题的讨论汇总
话题: nogo话题: int话题: 线程话题: void话题: runnable