java 多线程个人心得
看一段代码,想想打印顺序结果有多少种?
public class Test {
private static int x = 0;
public static void main(String[] args) throws InterruptedException {
new Thread(() -> {
System.out.println("线程A启动");
x++;
System.out.println("线程A修改x为:" + x);
}).start();
new Thread(() -> {
System.out.println("线程B启动");
x++;
System.out.println("线程B修改x为:" + x);
}).start();
System.out.println("main 结束" );
}
}
关于多线程的运行,先搞清楚这几点:
- 1、一个线程内的程序即run方法的程序是顺序执行的 =》 程序下面的变量的值肯定时上面的程序运行的结果
- 2、 多个线程运行时,它们的程序是交错执行的,即你可能执行n步后,我接着再执行n步,这就是多线程的魅力,也是多线程造成共享变量的数据不一致的原因,还有一个原因是 共享变量的可见性,即修改一个共享变量的值,但未使其它线程看到 ;
- 3、程序的拆分:在单线程中,很多人会将 多步操作 看成 一步性 操作 ,比如 i++,在多线程中,这是不行的,应为你永远不知道他会在哪一步丢失cpu运行权,例如i++,完成这个操作,包括三步,取加存,它会在三个地方丢失cpu运行权 ,所以,解读程序时一定要看清程序到底操作几步;