Java多线程间的数据共享
2014-03-18 08:15
274 查看
下面的程序演示了一个对象被两个线程访问的方法,"monitor.gotMessage();"这一句虽然是monitor对象的方法,但却是运行在"MyObject"的线程里,而不是"monitor"线程里。
BusyWaiting.java:
public class BusyWaiting {
public static void main(String[] args) {
Monitor monitor = new Monitor();
MyObject o = new MyObject(monitor);
new Thread(o, " MyObject ").start();
new Thread(monitor, " monitor ").start();
System.out.println("main thread exit...");
}
}
MyObject.java
import java.util.concurrent.TimeUnit; public class MyObject implements Runnable { private final Monitor monitor; public MyObject(Monitor monitor) { this.monitor = monitor; } public void run() { try { TimeUnit.SECONDS.sleep(3); System.out.println("i'm going."); monitor.gotMessage(); } catch (InterruptedException e) { e.printStackTrace(); } } }
Monitor.java
public class Monitor implements Runnable {
private volatile boolean go = false;
public void gotMessage() throws InterruptedException {
go = true;
}
public void watching() {
while (go == false)
;
System.out.println("He has gone.");
}
public void run() {
watching();
}
}
另外采用
MyObject o = new MyObject(monitor);
new Thread(o, " thread1 ").start();
new Thread(o, "thread2").start();
也是一种常用的多个线程共享数据的方式,
BusyWaiting.java:
public class BusyWaiting {
public static void main(String[] args) {
Monitor monitor = new Monitor();
MyObject o = new MyObject(monitor);
new Thread(o, " MyObject ").start();
new Thread(monitor, " monitor ").start();
System.out.println("main thread exit...");
}
}
MyObject.java
import java.util.concurrent.TimeUnit; public class MyObject implements Runnable { private final Monitor monitor; public MyObject(Monitor monitor) { this.monitor = monitor; } public void run() { try { TimeUnit.SECONDS.sleep(3); System.out.println("i'm going."); monitor.gotMessage(); } catch (InterruptedException e) { e.printStackTrace(); } } }
Monitor.java
public class Monitor implements Runnable {
private volatile boolean go = false;
public void gotMessage() throws InterruptedException {
go = true;
}
public void watching() {
while (go == false)
;
System.out.println("He has gone.");
}
public void run() {
watching();
}
}
另外采用
MyObject o = new MyObject(monitor);
new Thread(o, " thread1 ").start();
new Thread(o, "thread2").start();
也是一种常用的多个线程共享数据的方式,
相关文章推荐
- java多线程并发库高级应用 之 多个线程之间共享数据的方式探讨
- Java多线程与并发应用-(6)-多个线程之间共享对象和数据的方式
- java多线程:5、线程范围内的数据共享_ThreadLocal
- java多线程:16、阻塞队列【BlockingQueue】实现线程数据共享的效果
- java核心知识点学习----多线程间的数据共享的几种实现方式比较
- JAVA多线程(四)多线程数据共享
- java多线程中关于数据共享
- Java多线程共享数据
- java多线程与线程并发五:多个线程访问共享对象和数据的方式
- 【Java多线程与并发库】7.多个线程之间共享数据的方式探讨
- java 多线程读取数据注意伪共享
- 【Java多线程与并发库】06 多个线程之间共享数据的方式探讨
- Java---12---多线程练习:卖票---实现数据共享
- 黑马程序员--读写字节数组,随机读写流,集合IO的思维导图,多线程部分,单例设计模式,线程和进程的概念,Java中的线程的创建方式,线程的随机性,线程的状态图,多线程操作共享数据的安全性,死锁
- java多线程通信之共享数据
- java 多线程 day07 多线程共享数据
- Java 多线程学习笔记 4 多线程共享数据
- IBM Java多线程 - 4.共享对数据的访问
- java面试题二十九 多线程数据共享问题
- Java多线程——出售票(线程同步,数据共享)