应付面试:面试管一般会问有过线程没有,你会在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捐助),没钱捧个人场,谢谢各位。
谢谢您的赞助,我会做的更好!
相关推荐
await()、signal()和signalAll()是java.util.concurrent包下的Condition类的方法,它们也用于线程间的协调,但提供了比Object的wait()、notify()更为灵活的机制。 - await():使线程在Condition上等待,同时释放...
`Lock`接口是Java并发库中的一种高级锁机制,相比传统的`synchronized`关键字,它提供了更细粒度的控制和更多的特性。`Lock`接口的主要实现类有`ReentrantLock`,它是一个可重入的互斥锁,具备与`synchronized`相似...
为了解决生产者和消费者之间的同步和通信问题,Java提供了几种不同的实现方式,包括synchronized关键字、Condition接口、Lock接口以及信号量(Semaphore)和阻塞队列(BlockingQueue)。 ### 1. synchronized关键字...
在Java并发编程中,Lock接口及其实现类是重要的同步机制,相比传统的synchronized关键字,提供了更细粒度的控制和更高的灵活性。本文将深入探讨JavaLock中的ReentrantLock(可重入锁)以及与其紧密相关的Condition...
与`synchronized`中的`wait()`和`notify()`方法不同,`Condition`的`await()`和`signal()`方法提供了更好的命名和更丰富的功能。 `synchronized`的缺陷主要体现在以下几个方面: 1. **不可中断**:一旦线程进入`...
本资源主要探讨了Java并发的新特性,特别是Lock锁和条件变量的使用。下面将详细阐述这两个概念以及如何在实际编程中应用它们。 Lock锁是Java并发库中的一个核心组件,位于java.util.concurrent.locks包下。相比传统...
本篇文章将深入探讨`ReentrantLock`的使用,它是Java并发包`java.util.concurrent.locks`中的一个高级锁机制,相比传统的`synchronized`关键字,提供了更丰富的功能和更灵活的控制。 `ReentrantLock`全称为可重入锁...
synchronized (lock) { lock.notify(); } } public void call() { System.out.println("发起调用"); asyncCall.call(this); synchronized (lock) { try { lock.wait(); } catch (InterruptedException e...
在JDK 1.5及以后的版本中,Java引入了`java.util.concurrent`包,其中包含了一些强大的并发工具类,如`Lock`接口和`Condition`接口,这些工具大大提升了生产者消费者模式的实现效率和线程安全性。 生产者消费者模式...
Java中的Lock类与Condition类是Java并发编程的重要组成部分,它们为多线程环境下的同步提供了更为灵活和强大的控制。在JDK 1.5及之后的版本中,Lock类作为替代synchronized关键字的一种方式出现,提供了更精细的锁...
2. **等待/通知机制**:`Condition`提供了`await()`、`signal()`和`signalAll()`方法,它们类似于`synchronized`块中的`wait()`、`notify()`和`notifyAll()`。但是,`Condition`的这些方法需要在持有相应`Lock`的...
- 如何检测和避免这些并发问题,如Java的`java.util.concurrent.locks.Condition`的`await()`和`signal()`方法。 7. **并发性能优化** - **线程池的配置与调整**:合理设置核心线程数、最大线程数、队列容量等...
12.详解Condition的await和signal等待通知机制 13.LockSupport工具 14.并发容器之ConcurrentHashMap(JDK 1.8版本) 15.并发容器之ConcurrentLinkedQueue 16.并发容器之CopyOnWriteArrayList 17.并发容器之ThreadLocal...
### JAVA-基础多线程 #### 一、线程概念 1. **线程定义**: - 线程是程序执行时的一条路径,是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。 - 一个线程指的是进程中一个...
在Java中,`java.util.concurrent.locks.Lock`是一个接口,提供了比`synchronized`更细粒度的锁控制。Lock提供了获取和释放锁的显式操作,使得程序员能更好地控制并发代码。它具有以下特点: 1. **可重入性**:Lock...
Java提供了多种同步机制,如`synchronized`关键字、`wait()`, `notify()`和`notifyAll()`方法,以及`Lock`接口和`Condition`对象。我们可以用`synchronized`关键字来保护共享资源,例如蛋糕库存,以防止并发访问时的...
- **同步方式**:Java提供了多种线程同步的方式,包括`synchronized`关键字和显式锁。 - **使用synchronized关键字**:在方法声明或代码块上使用`synchronized`关键字可以实现简单的同步。被`synchronized`修饰的...
`Condition` 提供了 `await()` 和 `signal()` 方法来替代 `wait` 和 `notify`。 **示例代码:** ```java Lock lock = new ReentrantLock(); Condition condition = lock.newCondition(); lock.lock(); try { ...
Java提供了多种机制来解决这个问题,包括synchronized关键字、wait()和notify()方法,以及高级的java.util.concurrent并发工具。 在Java中,我们可以使用阻塞队列(BlockingQueue)来简化生产者消费者问题的实现。 ...