Java子线程和主线程交替输出(一个简单的实例)
来源:互联网 发布:迪奥华氏知乎 编辑:程序博客网 时间:2024/06/05 08:58
实现主线程和子线程的交替输出打印,首先创建一个实现线程方法的Service
public class Service {private volatile boolean flag = false; //这是一个控制sub和mian的开关,加关键字volatile保证不同的线程看到的flag值是最新的public synchronized void sub(){while(flag) { //因为flag初始值是false,所以当子线程获取锁进入时不会等待,会直接输出打印try {this.wait();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}for(int i=0;i<5;i++) {System.out.println("子线程运行 " +i);}flag = true; //打印完成后,应当切换到main,同时应当唤醒正在等待的主线程this.notifyAll(); //子线程再次试图进入sub时,flag为true,就会进入等待,切换到了main中}public synchronized void main() {while(!flag) { //flag初始值是false,因此,即使主线程先获取锁也会进入等待状态,并释放锁,一直到sub执行完后,flag变为true,同时,主线程被唤醒try {this.wait();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//主线程被唤醒后,开始打印输出for(int i=0;i<5;i++) {System.out.println("main线程运行 " +i);}flag = false; //然后又切换到sub,并唤醒等待的子线程this.notifyAll();}}
public static void main(String[] args) throws InterruptedException {final Service service = new Service();Runnable r = new Runnable() {@Overridepublic void run() {for(int i=0;i<5;i++) {service.sub(); //多次试图运行子线程}}};Thread thread = new Thread(r);thread.start();for(int i=0;i<5;i++) {service.main(); //和子线程竞争锁}}
这样,子线程启动后,会和主线程同时竞争service的锁,因为flag初始值是false,则即使主线程先获取的锁,也会进入等待,释放锁,所以,首先会打印子线程的输出,子线程打印完成后,flag变为true,并且唤醒的其他的线程(因为一共就两个线程,所以,另一个等待的线程就是主线程)。然后又回到了原始的状态,只是这次flag是true,因此,主线程会获取到锁,并打印输出,这样依次会交替5次。
阅读全文
1 0
- Java子线程和主线程交替输出(一个简单的实例)
- 手游中android平台在java代码里--->游戏子线程和java主线程的交替运行
- 关于java线程的经典面试题。主线程子线程交替执行n次
- 多线程demo-主线程和子线程交替运行
- 子线程主线程循环交替执行
- Java 创建两个线程,和主线程交替运行。
- 安卓--子线程和主线程之间的交互实例(时钟)
- Java 主线程和子线程的转换
- 主线程和子线程均循环10次,两者交替运行50次
- 主线程和子线程的双向通信
- 主线程和子线程的区别
- 主线程和子线程的区别
- java 线程 交替输出
- Java:主线程和子线程-----主线程等待子线程结束
- 主线程和子线程
- 主线程和子线程
- 主线程和子线程
- 编写:创建2个线程,和主线程交替运行.
- 希尔排序
- git安装及使用教程
- 记一次mysql 调优
- 报错信息:RunJar jarFile [mainClass] args...解决方案
- Kotlin基本使用三
- Java子线程和主线程交替输出(一个简单的实例)
- android studio解决finished with non-zero exit value 1方法
- ObjectArx编程(一) ------ 环境的搭建
- Kali Linux安装ipython2 和 ipython3
- Ubuntu14.10登录界面隐藏其他用户登录窗口
- 【LeetCode】数组系列(排序)
- Hibernate基础的增删改查
- 那些年——2 心声共鸣
- 阿里云 nginx