【原】Java 线程时间片轮换的流程解释

有如下程序, 两个线程公用数据, 都会对数据进行更改

public class Test
{
 public static void main(String[] args) {
 Run run = new Run(50);
 Thread thread1 = new Thread(run);
 thread1.start();
 Thread thread2 = new Thread(run);
 thread2.start();
 }
}
 
class Run implements Runnable
{
int n;
public Run(int n)
{
this.n = n;
 }
public void run() {
for ( ; n > 0; -- n)
{
 	 System.out.println(Thread.currentThread().getName() + " : " + n);
 	}
 }
}

输出中会有重复和跳过的数字, 原因都是时间片的轮换出现在构造字符串和输出两步之间造成的, 流程如图:
重复的数字出现原因:

跳过一个数字流程:

此条目发表在 Java 分类目录。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>