Heim > Fragen und Antworten > Hauptteil
public static void main(String[] args){
new Thread(new Runnable() {
@Override
public void run() {
for (int i=0; i<10; i++){
System.out.print(i+" ");
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
for (int i=0; i<10; i++){
System.out.print(i+" ");
}
}
}).start();
}
输出结果如下:
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
伊谢尔伦2017-04-18 10:29:18
如果没有同步锁,这两个线程是不会出现你说的交叉打印的,线程的执行的优先级在于谁先获取了cpu资源,你的程序并不能保证哪个线程先执行。再好好看看java多线程知识吧。
迷茫2017-04-18 10:29:18
设置的次数太少,如果你设置100个数就能看到俩个线程交叉(这里的交叉不是线程1打印一个数,线程2马上打印一个数,而是一段一段的)打印的效果;cpu抢到资源就执行了。你要实现交叉打印的话,那是个生产这与消费者的例子。
ringa_lee2017-04-18 10:29:18
线程的执行顺序是不确定的,谁抢占到cpu谁就执行,十个数字的顺序也不一定是你这样的,你多执行几次就会出现不同的结果。而且线程的优先级也无法保障线程的执行次序。只不过优先级高的线程获取 CPU 资源的概率大一点而已。
迷茫2017-04-18 10:29:18
public void run() {
for (int i=0; i<10; i++){
System.out.print(i+" ");
Sleep(1000);
}
}
这样能看到比较明显的交叉打印现象,但实际上并发指的是我们无法得知哪个线程先执行哪个线程后
执行,而不是一定会交叉。夸张地说,对两个线程的分别m, n条汇编指令做插入,可以有
C_{m+n-1}^{min(m,n)}阶乘级别多的执行顺序。