`
knight_black_bob
  • 浏览: 852397 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Lock java synchronized sendlockCondition.await sendlockCondition.signal();

    博客分类:
  • java
阅读更多

       

    应付面试:面试管一般会问有过线程没有,你会在A的线程里面获取B线程的数据吗?

   

     见图:(图1)

 

 1.创建一个缓存池,用于线程管理

package test20140907.testthread3;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class ThreadPool {

	private ThreadPool() {
	}
	private static ThreadPool instance;
	public static ThreadPool getInstance() {
		if (instance == null) {
			instance = new ThreadPool();
		}
		return instance;
	}

	
	@SuppressWarnings("rawtypes")
	static Future future =null;
	static ExecutorService cachedService;

	public void init() {
		cachedService = Executors.newFixedThreadPool(1);
		cachedService.execute(new RunableA());
	}
	class RunableA implements Runnable {

		@Override
		public void run() {
			TaskFirst tf =new TaskFirst();
			tf.getValue();
		}

	}
	
}

 

 

 

 

 2.任务下发

package test20140907.testthread3;

import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class TaskFirst {

	
	static double d;

	Lock sendlock = new ReentrantLock();
	Condition sendlockCondition =sendlock.newCondition();
	
	
	public void addValue(double doub){
		sendlock.lock();
		try {
			sendlockCondition.await(5,TimeUnit.SECONDS);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("getValue d: "+ d);
		sendlock.unlock();
	}
	
	public void getValue(){
		sendlock.lock();
		try {
			Thread.sleep(3000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		this.d= 5.5;
		System.out.println("addValue d: "+ d);
		sendlockCondition.signal();
		sendlock.unlock();
	}

}

 

 

3.测试  模拟一个执行任务的线程获取数据,该线程犹如网络延迟耗费3s 然后接收任务的线程等待5s 获取数据 完成一次同步的通讯

package test20140907.testthread3;

public class Test {


	public static void main(String[] args) {
		ThreadPool.getInstance().init();
		TaskFirst tf =new TaskFirst();
		tf.addValue(2);
		
	}

}

 

 

 

 

 

 

 

 

 

 

 

 

 

捐助开发者

在兴趣的驱动下,写一个免费的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(右上角的爱心标志,支持支付宝和PayPal捐助),没钱捧个人场,谢谢各位。



 
 
 谢谢您的赞助,我会做的更好!

 

 

  • 描述: 运行结果
  • 大小: 10.8 KB
分享到:
评论

相关推荐

    Java线程中wait,await,sleep,yield,join用法总结.pdf

    await()、signal()和signalAll()是java.util.concurrent包下的Condition类的方法,它们也用于线程间的协调,但提供了比Object的wait()、notify()更为灵活的机制。 - await():使线程在Condition上等待,同时释放...

    生产者-消费者(lock和condition).zip

    `Lock`接口是Java并发库中的一种高级锁机制,相比传统的`synchronized`关键字,它提供了更细粒度的控制和更多的特性。`Lock`接口的主要实现类有`ReentrantLock`,它是一个可重入的互斥锁,具备与`synchronized`相似...

    java多线程实现生产者和消费者

    为了解决生产者和消费者之间的同步和通信问题,Java提供了几种不同的实现方式,包括synchronized关键字、Condition接口、Lock接口以及信号量(Semaphore)和阻塞队列(BlockingQueue)。 ### 1. synchronized关键字...

    JavaLock与Condition的理解Reentran

    在Java并发编程中,Lock接口及其实现类是重要的同步机制,相比传统的synchronized关键字,提供了更细粒度的控制和更高的灵活性。本文将深入探讨JavaLock中的ReentrantLock(可重入锁)以及与其紧密相关的Condition...

    java 锁 Lock接口详解.docx

    与`synchronized`中的`wait()`和`notify()`方法不同,`Condition`的`await()`和`signal()`方法提供了更好的命名和更丰富的功能。 `synchronized`的缺陷主要体现在以下几个方面: 1. **不可中断**:一旦线程进入`...

    Java并发编程(20)并发新特性-Lock锁和条件变量(

    本资源主要探讨了Java并发的新特性,特别是Lock锁和条件变量的使用。下面将详细阐述这两个概念以及如何在实际编程中应用它们。 Lock锁是Java并发库中的一个核心组件,位于java.util.concurrent.locks包下。相比传统...

    java多线程系列(四)ReentrantLock的使用.docx

    本篇文章将深入探讨`ReentrantLock`的使用,它是Java并发包`java.util.concurrent.locks`中的一个高级锁机制,相比传统的`synchronized`关键字,提供了更丰富的功能和更灵活的控制。 `ReentrantLock`全称为可重入锁...

    Java异步调用转同步方法实例详解

    synchronized (lock) { lock.notify(); } } public void call() { System.out.println("发起调用"); asyncCall.call(this); synchronized (lock) { try { lock.wait(); } catch (InterruptedException e...

    Java JDK1.5 生产消费者模式解决方案

    在JDK 1.5及以后的版本中,Java引入了`java.util.concurrent`包,其中包含了一些强大的并发工具类,如`Lock`接口和`Condition`接口,这些工具大大提升了生产者消费者模式的实现效率和线程安全性。 生产者消费者模式...

    java中的Lock类和Condition类.docx

    Java中的Lock类与Condition类是Java并发编程的重要组成部分,它们为多线程环境下的同步提供了更为灵活和强大的控制。在JDK 1.5及之后的版本中,Lock类作为替代synchronized关键字的一种方式出现,提供了更精细的锁...

    Java concurrency之Condition条件_动力节点Java学院整理

    2. **等待/通知机制**:`Condition`提供了`await()`、`signal()`和`signalAll()`方法,它们类似于`synchronized`块中的`wait()`、`notify()`和`notifyAll()`。但是,`Condition`的这些方法需要在持有相应`Lock`的...

    java concurrency in practice.rar

    - 如何检测和避免这些并发问题,如Java的`java.util.concurrent.locks.Condition`的`await()`和`signal()`方法。 7. **并发性能优化** - **线程池的配置与调整**:合理设置核心线程数、最大线程数、队列容量等...

    【2018最新最详细】并发多线程教程

    12.详解Condition的await和signal等待通知机制 13.LockSupport工具 14.并发容器之ConcurrentHashMap(JDK 1.8版本) 15.并发容器之ConcurrentLinkedQueue 16.并发容器之CopyOnWriteArrayList 17.并发容器之ThreadLocal...

    JAVA-基础多线程

    ### JAVA-基础多线程 #### 一、线程概念 1. **线程定义**: - 线程是程序执行时的一条路径,是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。 - 一个线程指的是进程中一个...

    locktest.zip

    在Java中,`java.util.concurrent.locks.Lock`是一个接口,提供了比`synchronized`更细粒度的锁控制。Lock提供了获取和释放锁的显式操作,使得程序员能更好地控制并发代码。它具有以下特点: 1. **可重入性**:Lock...

    3个厨师做蛋糕,5个顾客吃蛋糕(java 线程问题)

    Java提供了多种同步机制,如`synchronized`关键字、`wait()`, `notify()`和`notifyAll()`方法,以及`Lock`接口和`Condition`对象。我们可以用`synchronized`关键字来保护共享资源,例如蛋糕库存,以防止并发访问时的...

    java线程学习

    - **同步方式**:Java提供了多种线程同步的方式,包括`synchronized`关键字和显式锁。 - **使用synchronized关键字**:在方法声明或代码块上使用`synchronized`关键字可以实现简单的同步。被`synchronized`修饰的...

    wait,notify等线程知识.pdf

    `Condition` 提供了 `await()` 和 `signal()` 方法来替代 `wait` 和 `notify`。 **示例代码:** ```java Lock lock = new ReentrantLock(); Condition condition = lock.newCondition(); lock.lock(); try { ...

    ProducerConsumer:用Java中的代码解决生产者和消费者问题

    Java提供了多种机制来解决这个问题,包括synchronized关键字、wait()和notify()方法,以及高级的java.util.concurrent并发工具。 在Java中,我们可以使用阻塞队列(BlockingQueue)来简化生产者消费者问题的实现。 ...

Global site tag (gtag.js) - Google Analytics