Java多线程间的数据共享
下面的程序演示了一个对象被两个线程访问的方法,"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();
也是一种常用的多个线程共享数据的方式,
最新文章
- Ubuntu PPTP 服务器安装
- share登录Samba可读可写(适合虚拟机下学习使用)
- GZAPI框架初识
- node.js 基础学习 express安装使用
- Java基础-继承-子类与父类执行顺序
- Java NIO学习(一)
- IGS_学习笔记01_Integrated SOA Gateway介绍(案例)
- UI6_UIAlertContrller
- MyDetailedOS
- 浅谈.Net和Java互相调用的三种方式
- Bootstrap Modal 框 alert confirm loading
- 优步北京B组(8月10日-8月16日奖励规则)
- 网站建设常用JQuery插件整理
- 画布跟js.oop
- CSS3实现的一批hover特效
- new File()
- 打包APP
- UML和模式应用5:细化阶段(2)--细化阶段制品之领域模型
- 建议使用nginx配合uwsgi,
- CSS 颜色