今天来写一篇Java关于多线程之线程通信例子。这是我学Java和工作这些年来,首次发表的博文,自己支持自己一下。
题目要求:写一个Java多线程程序,要求子线程循环输出10次,然后主线程循环输出10次,再接着子循环输出10次,再然后主线程循环输出10次。。。如此往复10次。
请大家帮我分析下,我的代码例子如下:
package org.jabari.tech.test;public class ConcurrentTest1 {
class BizObj {
//当前执行游标是否在子线程(true:子线程执行;false:父线程执行)
private boolean cursorInSub;
public BizObj(boolean cursorInSub) {
super();
this.cursorInSub = cursorInSub;
}
public boolean isCursorInSub() {
return cursorInSub;
}
public void setCursorInSub(boolean cursorInSub) {
this.cursorInSub = cursorInSub;
}
}
public static void main(String[] args){
ConcurrentTest1 t = new ConcurrentTest1();
//创建一个锁对象,默认当前执行子线程。
final BizObj objLock = t.new BizObj(true);
new Thread(new Runnable(){
public void run() {
for(int j=0;j<10;j++){
synchronized(objLock) {
while (!objLock.isCursorInSub()) {
try {
objLock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName()+"-loop["+j+"]-"+i);
}
objLock.setCursorInSub(false);
objLock.notify();
}
}
}
},"sub").start();
//这里其实不需要再New一个主线程执行,因为main方法本身就是一个主线程单独执行。
// new Thread(new Runnable() {
// @Override
// public void run() {
for(int j=0;j<10;j++){
synchronized(objLock) {
while (objLock.isCursorInSub()) {
try {
objLock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName()+"-loop["+j+"]-"+i);
}
objLock.setCursorInSub(true);
objLock.notify();
}
}
// }
// },"main").start();
// System.out.println(Thread.currentThread().getName()+" Finishes!");
}
}
相关推荐
开一个子线程来完成一个循环处理的工作,我在主线程中能灵活控制这个子线程的开始、暂停/继续、结束。
源码—Java多线程5—死锁和wait notify notifyAll
主要介绍了java多线程wait,notify,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,下面小编和大家一起来学习一下吧
java多线程之wait,notify的用法([ 详解+实例 ]).
java多线程下wait和notify的作用
一个理解wait()与notify()的例子,让你更好理解.
使用Java多线程的wait和notify方法实现最简单的生产者消费者模式
Java 同步方式 wait和notify/notifyall
主要介绍了Java多线程中wait、notify、notifyAll使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Java多线程机制 9.1 Java中的线程 9.2 Thread的子类创建线程 9.3 使用Runable接口 9.4 线程的常用方法 9.5 GUI线程 9.6 线程同步 9.7 在同步方法中使用wait()、notify 和notifyAll()方法 9.8 挂起、恢复和终止线程 ...
绍java多线程之wait(),notify(),notifyAll()
主要介绍了Java多线程通讯之wait,notify的区别详解,非常不错,具有一定的参考借鉴借鉴价值,需要的朋友可以参考下
Java多线程的样例代码,工程,内含wait()、notify()和sychronized的使用范例。
《JAVA多线程设计模式》PDF 下载 《Java线程 高清晰中文第二版》中文第二版(PDF) 前言 第一章 线程简介 Java术语 线程概述 为什么要使用线程? 总结 第二章 Java线程API 通过Thread类创建线程 使用Runable接口...
Java多线程同步(wait()notify()notifyAll())[文].pdf
java中多线程编程notify、wait的使用
wait set——线程的休息室 wait方法——把线程放入wait set notify方法——从wait set拿出线程 notifyAll方法——从wait set拿出所有线程 wait、notify、notifyAll是Object类的方法 线程的状态移转 跟线程有关的其他...
主线程去控制子线程wait与notify
wait, notify 和 notifyAll,这些在多线程中被经常用到的保留关键字,在实际开发的时候很多时候却并没有被大家重视。本文对这些关键字的使用进行了描述。 在 Java 中可以用 wait、notify 和 notifyAll 来实现...
本篇文章是对java多线程 wait(),notify(),notifyAll()进行了详细的分析介绍,需要的朋友参考下