public class ww
{
public static void main(String[] args)
{
TestThread t=new TestThread();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
}
} class TestThread extends Thread
{
public void run()
{
int i=20;
while(i>0)
{
i--;
System.out.println(i+" "+this.isAlive()+" "+Thread.currentThread().isAlive());
}
}
}
运行结果是:19 false true
18 false true
17 false true
16 false true
15 false true
14 false true
13 false true
12 false true
11 false true
10 false true
9 false true
8 false true
7 false true
6 false true
5 false true
4 false true
3 false true
2 false true
1 false true
0 false true
19 false true
18 false true
17 false true
16 false true
15 false true
14 false true
13 false true
12 false true
11 false true
10 false true
9 false true
8 false true
7 false true
6 false true
5 false true
4 false true
3 false true
2 false true
1 false true
0 false true
19 false true
18 false true
17 false true
16 false true
15 false true
14 false true
13 false true
12 false true
11 false true
10 false true
9 false true
8 false true
7 false true
6 false true
5 false true
4 false true
3 false true
2 false true
1 false true
0 false true这三个线程应该可以共享同一段代码,共同操作资源啊,比如字段i,但是程序输出结果却不是这样,
这是为什么???
{
public static void main(String[] args)
{
TestThread t=new TestThread();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
}
} class TestThread extends Thread
{
public void run()
{
int i=20;
while(i>0)
{
i--;
System.out.println(i+" "+this.isAlive()+" "+Thread.currentThread().isAlive());
}
}
}
运行结果是:19 false true
18 false true
17 false true
16 false true
15 false true
14 false true
13 false true
12 false true
11 false true
10 false true
9 false true
8 false true
7 false true
6 false true
5 false true
4 false true
3 false true
2 false true
1 false true
0 false true
19 false true
18 false true
17 false true
16 false true
15 false true
14 false true
13 false true
12 false true
11 false true
10 false true
9 false true
8 false true
7 false true
6 false true
5 false true
4 false true
3 false true
2 false true
1 false true
0 false true
19 false true
18 false true
17 false true
16 false true
15 false true
14 false true
13 false true
12 false true
11 false true
10 false true
9 false true
8 false true
7 false true
6 false true
5 false true
4 false true
3 false true
2 false true
1 false true
0 false true这三个线程应该可以共享同一段代码,共同操作资源啊,比如字段i,但是程序输出结果却不是这样,
这是为什么???
另外考虑到数据共享应该用临界区。
代码:public class ww {
public static void main(String[] args){
TestThread t=new TestThread();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
}
} class TestThread extends Thread {
int i=20;
public synchronized void run(){
while(i>0){
i--;
System.out.println(i+" "+this.isAlive()+" "+
Thread.currentThread().isAlive());
}
}
}
去掉synchronized你就会看到多个线程产生的冲突,尤其在时间切片比较平凡的jdk6下。
new Thread(t).start();
new Thread(t).start();
new Thread(t).start(); 可能不能这样写,不能调用同个t吧,等高手来讲解