重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本文研究的主要是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); } } } } }