JAVA线程间共享变量

import java.util.HashMap;
import java.util.Map;
import java.util.Random;

public class ThreadScopeShareData {

	static Map<Thread, Integer> dataMap = new HashMap<Thread, Integer>();

	public static void main(String[] args) {

		for (int i = 0; i < 2; i++) {
			new Thread(new Runnable() {

				@Override
				public void run() {
					int data = new Random().nextInt(100);

					dataMap.put(Thread.currentThread(), new Integer(data));

					System.out.println("put the " + data + " into :"
							+ Thread.currentThread());

					new A().get();

					new B().get();

				}
			}).start();
		}

	}

	static class A {
		public void get() {
			int data = (int) dataMap.get(Thread.currentThread());
			System.out.println("A has got the data :" + data);
		}
	}

	static class B {
		public void get() {
			int data = (int) dataMap.get(Thread.currentThread());
			System.out.println("B has got the data :" + data);
		}
	}

}

更多内容请关注公众号

JAVA线程间共享变量

时间: 2024-09-30 16:39:34

JAVA线程间共享变量的相关文章

Java——线程间通信问题

 wait和sleep区别: 1.wait可以指定时间可以不指定.     sleep必须指定时间. 2.在同步时,对cpu的执行权和锁的处理不同.     wait:释放执行权,释放锁.     sleep:释放执行权,不释放锁. /* * 等待/唤醒机制 * 设计的方法: * 1.wait():让线程处于等待状态,被wait的线程会被存储到线程池中. * 2.notify():唤醒线程池中的一个线程(任意) * 3.notifyAll():唤醒线程池中的所有线程. * 这些方法都必须定义

说说Java线程间通信

序言 正文 [一] Java线程间如何通信? 线程间通信的目标是使线程间能够互相发送信号,包括如下几种方式: 1.通过共享对象通信 线程间发送信号的一个简单方式是在共享对象的变量里设置信号值:线程A在一个同步块里设置boolean型成员变量hasDataToProcess为true,线程B也在同步块里读取hasDataToProcess这个成员变量:线程A和B必须获得指向一个MySignal共享实例的引用,以便进行通信:如果它们持有的引用指向不同的MySingal实例,那么彼此将不能检测到对方的

java线程间通信

等待通知机制的实现 方法wait()的作用是使当前执行代码的线程进行等待,wait()方法是object类的方法,该方法的作用是将当前线程置入"预执行队列中",并且在wait()所在的代码行处停止执行,直到接到通知,或者被中断为止. 在调用wait()方法执行,线程需要先获得该对象的对象级别锁,也就是说,只能在同步方法,或者同步块中调用wait()方法,在执行wait()方法后,当前线程释放锁,在从wait()方法返回前,线程与其他线程竞争重新获得锁,如果调用wait()是没有持有适当

JAVA线程间协作:wait.notify.notifyAll

JAVA的进程同步是通过synchronized()来实现的,须要说明的是,JAVA的synchronized()方法相似于操作系统概念中的相互排斥内存块.在JAVA中的Object类型中.都是带有一个内存锁的,在有线程获取该内存锁后.其它线程无法訪问该内存.从而实现JAVA中简单的同步.相互排斥操作. 明确这个原理.就能理解为什么synchronized(this)与synchronized(static XXX)的差别了.synchronized就是针对内存区块申请内存锁,thiskeywo

Java线程间通信之wait/notify

Java中的wait/notify/notifyAll可用来实现线程间通信,是Object类的方法,这三个方法都是native方法,是平台相关的,常用来实现生产者/消费者模式.先来我们来看下相关定义: wait() :调用该方法的线程进入WATTING状态,只有等待另外线程的通知或中断才会返回,调用wait()方法后,会释放对象的锁. wait(long):超时等待最多long毫秒,如果没有通知就超时返回. notify() : 通知一个在对象上等待的线程,使其从wait()方法返回,而返回的前

【JAVA线程间通信技术】

之前的例子都是多个线程执行同一种任务,下面开始讨论多个线程执行不同任务的情况. 举个例子:有个仓库专门存储货物,有的货车专门将货物送往仓库,有的货车则专门将货物拉出仓库,这两种货车的任务不同,而且为了完成任务需要彼此相互合作,如果仓库中没有货物了而将货物拉出仓库的货车先到达了,那么它只有先等待其它货车将货物送入仓库......这种情况和线程间通信的情况很相似. 一.问题的提出-单生产者单消费者模式. 需求:定义一个容器,存储了字段姓名和性别,一个线程0为姓名和性别赋值,赋值完毕之后另一个线程1取

黑马程序员——java——线程间的通讯 生产者与消费者

线程间的的通讯  生产者与消费者 public class TestDemos3 { public static void main(String[] args) { Res r = new Res(); Input in = new Input(r); Output out = new Output(r); Thread t1 = new Thread(in); Thread t2 = new Thread(out); t1.start(); t2.start(); } } class Res

JAVA线程间的状态转换

线程间的状态转换:  1. 新建(new):新创建了一个线程对象. 2. 可运行(runnable):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法.该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 . 3. 运行(running):可运行状态(runnable)的线程获得了cpu 时间片(timeslice) ,执行程序代码. 4. 阻塞(block):阻塞状态是指线程因为某种原因放弃了cpu 使用权,也即让出了cpu timeslice,

Java 线程间通讯

/* 线程间通讯: 多个线程在处理同一资源,但是任务却不同. */ package com.cwcec.test; class Input implements Runnable { Resource r; public Input(Resource r) { this.r = r; } public void run() { int x = 0; while(true) { synchronized (r) { if(x == 0) { r.name = "Mike"; r.sex