新人初学线程,想实现线程1输出1 2 3 4 5,然后线程2输出6, 7 8 9 10,再是线程1输出11 12 13 14 15,这样一直输出到50.
代码如下:
package 多线程;
public class 线程同步2 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TongBu1 t = new TongBu1();
Thread p1 = new Thread(t);
p1.setName("线程1");
p1.start();
Thread p2 = new Thread(t);
p2.setName("线程2");
p2.start();
}
}
class TongBu1 implements Runnable{
static int count =1;
public synchronized void run() {
for (int i = count; i <= 50; i++) {
try {
System.out.println(Thread.currentThread().getName()+"输入:"+i);
if (i-count==4) {
count=i+1;
notify();
wait();
}
} catch (Exception e) {
// TODO: handle exception
}
}
}
}
==========================================================================
结果输出为:
线程1输入:1
线程1输入:2
线程1输入:3
线程1输入:4
线程1输入:5
线程2输入:6
线程2输入:7
线程2输入:8
线程2输入:9
线程2输入:10
线程1输入:6
线程1输入:7
线程1输入:8
线程1输入:9
线程1输入:10
线程1输入:11
线程1输入:12
线程1输入:13
线程1输入:14
线程1输入:15
线程2输入:11
线程2输入:12
线程2输入:13
线程2输入:14
线程2输入:15
线程2输入:16
线程2输入:17
线程2输入:18
线程2输入:19
线程2输入:20
线程1输入:16
线程1输入:17
线程1输入:18
线程1输入:19
线程1输入:20
线程1输入:21
线程1输入:22
线程1输入:23
线程1输入:24
线程1输入:25
线程2输入:21
线程2输入:22
线程2输入:23
线程2输入:24
线程2输入:25
线程2输入:26
线程2输入:27
线程2输入:28
线程2输入:29
线程2输入:30
线程1输入:26
线程1输入:27
线程1输入:28
线程1输入:29
线程1输入:30
线程1输入:31
线程1输入:32
线程1输入:33
线程1输入:34
线程1输入:35
线程2输入:31
线程2输入:32
线程2输入:33
线程2输入:34
线程2输入:35
线程2输入:36
线程2输入:37
线程2输入:38
线程2输入:39
线程2输入:40
线程1输入:36
线程1输入:37
线程1输入:38
线程1输入:39
线程1输入:40
线程1输入:41
线程1输入:42
线程1输入:43
线程1输入:44
线程1输入:45
线程2输入:41
线程2输入:42
线程2输入:43
线程2输入:44
线程2输入:45
线程2输入:46
线程2输入:47
线程2输入:48
线程2输入:49
线程2输入:50
线程1输入:46
线程1输入:47
线程1输入:48
线程1输入:49
线程1输入:50
================================================================================
调试过程中,发现
count明明是11,为什么i被赋值为6?