本文研究的主要是Java并发之传统线程同步通信技术的相关代码示例,具体介绍如下。
先看一个问题:
有两个线程,子线程先执行10次,然后主线程执行5次,然后再切换到子线程执行10,再主线程执行5次……如此往返执行50次。
看完这个问题,很明显要用到线程间的通信了, 先分析一下思路:首先肯定要有两个线程,然后每个线程中肯定有个50次的循环,因为每个线程都要往返执行任务50次,主线程的任务是执行5次,子线程的任务是执行10次。线程间通信技术主要用到wait()
方法和notify()
方法。wait()方法会导致当前线程等待,并释放所持有的锁,notify()
方法表示唤醒在此对象监视器上等待的单个线程。下面来一步步完成这道线程间通信问题。
首先不考虑主线程和子线程之间的通信,先把各个线程所要执行的任务写好:
public class TraditionalThreadCommunication { public static void main(String[] args) { //开启一个子线程 new Thread(new Runnable() { @Override public void run() { for (int i = 1; i <= 50; i ++) { synchronized (TraditionalThreadCommunication.class) { //子线程任务:执行10次 for (int j = 1;j <= 10; j ++) { System.out.println("sub thread sequence of " + j + ", loop of " + i); } } } } } ).start(); //main方法即主线程 for (int i = 1; i <= 50; i ++) { synchronized (TraditionalThreadCommunication.class) { //主线程任务:执行5次 for (int j = 1;j <= 5; j ++) { System.out.println("main thread sequence of " + j + ", loop of " + i); } } } } }