Java回顾之多线程同步

  第一篇:Java回顾之I/O

  第二篇:Java回顾之网络通信

  第三篇:Java回顾之多线程

  在这篇文章里,我们关注线程同步的话题。这是比多线程更复杂,稍不留意,香港空间,我们就会“掉到坑里”,而且和单线程程序不同,香港服务器,多线程的错误是否每次都出现,也是不固定的,这给调试也带来了很大的挑战。

  在这篇文章里,我们首先阐述什么是同步,不同步有什么问题,然后讨论可以采取哪些措施控制同步,接下来我们会仿照回顾网络通信时那样,构建一个服务器端的“线程池”,JDK为我们提供了一个很大的concurrent工具包,最后我们会对里面的内容进行探索。

  为什么要线程同步?

  说到线程同步,大部分情况下,香港虚拟主机, 我们是在针对“单对象多线程”的情况进行讨论,一般会将其分成两部分,一部分是关于“共享变量”,一部分关于“执行步骤”。

  共享变量

  当我们在线程对象(Runnable)中定义了全局变量,run方法会修改该变量时,如果有多个线程同时使用该线程对象,那么就会造成全局变量的值被同时修改,造成错误。我们来看下面的代码:

共享变量造成同步问题

1 class MyRunner implements Runnable 2 {sum = 0; run() 6 { 7System.out.println(Thread.currentThread().getName() + ” Start.”); 8for (int i = 1; i <= 100; i++) 9 {10sum += i;11 }12try {13Thread.sleep(500);14} catch (InterruptedException e) {15 e.printStackTrace();16 }17System.out.println(Thread.currentThread().getName() + ” — The value of sum is ” + sum);18System.out.println(Thread.currentThread().getName() + ” End.”);19 }20 }sharedVaribleTest() throws InterruptedException24 {25MyRunner runner = new MyRunner();26Thread thread1 = new Thread(runner);27Thread thread2 = new Thread(runner);28thread1.setDaemon(true);29thread2.setDaemon(true);30 thread1.start();31 thread2.start();32 thread1.join();33 thread2.join();34 }你说,你可以把它取下来吗?当我要取的时候,你淘气的躲开了,

Java回顾之多线程同步

相关文章:

你感兴趣的文章:

标签云: