- 浏览: 374440 次
- 性别:
- 来自: Alien
-
文章分类
最新评论
-
风一样的男人__:
[flash=200,200][url]引用[/url][/f ...
java线程内存模型,线程、工作内存、主内存 -
极乐君:
厉害了,,,请问可以转载到我们专栏吗?会注明来源和地址的~专栏 ...
java线程内存模型,线程、工作内存、主内存 -
zdd001:
Spring 线程池使用 -
zdd001:
Spring 线程池使用 -
u014663756:
看了三行就知道是我想要的!!
java线程内存模型,线程、工作内存、主内存
本人采用java语言,用三种方式实现生产者——消费者的经典问题,至于生产者和消费的问题就不多说了,以下是第一种方式的具体代码:
[java] view plaincopy
- <span style="font-family:Arial;">
- /**
- * 消费者:生产者:生产者和消费者共用一个仓库
- */
- public class Consumer implements Runnable {
- private Storage storage;
- public Consumer(Storage storage) {
- this.storage = storage;
- }
- // 消费
- public void cunsume() {
- while (true) {
- storage.get();
- try {
- Thread.sleep(1500); // 每消费完一件产品,休息1.5秒
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- }
- }
- }
- @Override
- public void run() {
- this.cunsume();
- }
- }
- </span>
[java] view plaincopy
- <span style="font-family:Arial;">
- /**
- * 生产者:生产者和消费者共用一个仓库
- */
- public class Producer implements Runnable {
- private Storage storage;
- public Producer(Storage storage){
- this.storage = storage;
- }
- @Override
- public void run(){
- this.produce();
- }
- // 生产
- public void produce(){
- while(true){
- storage.put();
- try {
- Thread.sleep(1000); // 每生产完一件产品,休息1秒
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- }
- }
- }
- }
- </span>
[java] view plaincopy
- <span style="font-family:Arial;">
- /**
- * 仓库:
- * 先生产的先消费:使用队列的方式实现
- */
- public class Storage {
- public static final int MAX_SIZE = 100; // 仓库的最大货存
- // 容器,为了使用方便,没有面向接口编程,使用LinkedList作为实现类
- private LinkedList<Object> container = new LinkedList<Object>();
- // 从仓库中存放一个产品:
- public synchronized void put(){
- try {
- while (container.size() == MAX_SIZE) {
- try {
- this.wait();
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- }
- }
- System.out.println("put()等待结束,仓库现有数量为"+ container.size() +", 开始生产");
- container.addLast(new Object());
- } finally {
- this.notifyAll(); // 通知其他线程
- }
- }
- // 从仓库中取出一个产品:
- public synchronized Object get(){
- try {
- while (container.size() == 0) {
- try {
- this.wait();
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- }
- }
- System.out.println("get()等待结束,仓库现有数量为"+ container.size() +", 开始取出");
- return container.removeFirst();// 取出
- } finally {
- this.notifyAll(); // 通知其他线程
- }
- }
- }</span>
以下是测试代码:
[java] view plaincopy
- <span style="font-family:Arial;">
- public class Test {
- public static void main(String[] args) {
- Storage storage = new Storage();
- // 生产者和消费者两个线程类,用的必须是同一个仓库,即同一个仓库对象storage
- Consumer con = new Consumer(storage);
- Producer pro = new Producer(storage);
- new Thread(pro).start();
- new Thread(pro).start();
- new Thread(pro).start();
- new Thread(pro).start();
- // new Thread(con).start();
- // new Thread(con).start();
- // new Thread(con).start();
- // new Thread(con).start();
- new Thread(con).start();
- }
- }</span>
以下是测试代码结果:
get()等待结束,仓库现有数量为100, 开始取出
put()等待结束,仓库现有数量为99, 开始生产
get()等待结束,仓库现有数量为100, 开始取出
put()等待结束,仓库现有数量为99, 开始生产
get()等待结束,仓库现有数量为100, 开始取出
put()等待结束,仓库现有数量为99, 开始生产
get()等待结束,仓库现有数量为100, 开始取出
put()等待结束,仓库现有数量为99, 开始生产
get()等待结束,仓库现有数量为100, 开始取出
put()等待结束,仓库现有数量为99, 开始生产
get()等待结束,仓库现有数量为100, 开始取出
put()等待结束,仓库现有数量为99, 开始生产
get()等待结束,仓库现有数量为100, 开始取出
put()等待结束,仓库现有数量为99, 开始生产
发表评论
-
Spring 线程池使用2
2013-04-25 18:41 1186<!-- 配置异步线程执行器 --> < ... -
java synchronized与lock区别 转
2013-03-20 01:59 1074java synchronized与lock区别 ... -
java并发编程实践笔记(转)
2012-11-28 01:14 955一、 保证线程安全的 ... -
并发集合类ConcurrentSkipListSet
2012-11-24 03:26 5647ConcurrentSkipListSet Concu ... -
Amdahl 定律 (阿姆达尔定律)
2012-11-24 02:14 2090有些问题使用越多的资源就能越快地解决——越多的工人参 ... -
java线程内存模型,线程、工作内存、主内存
2012-11-24 02:08 18318java线程内存模型 线程、工作内存、主内存三者之间的 ... -
线程同步与异步
2012-11-22 23:53 2498Java中的线程同步与 ... -
Java 并发核心编程(转)
2012-11-06 10:16 1051Java 并发核心编程(转) Java 并发核心编程 ... -
java线程:关于Callable和Future的简单使用:有返回值的线程
2012-11-06 09:19 1998分类: java_线程2012-07-03 19 ... -
java数据结构:ConcurrentSkipListSet<E>与CopyOnWriteArraySet<E>
2012-11-06 09:20 5910分类: java_数据结构 java_线程201 ... -
java线程:信号量
2012-11-06 09:20 914Java 信号量 Semaphore 介绍 Semaphore ... -
java线程:一个死锁的小程序
2012-11-06 09:20 2731死锁是这样一种 ... -
java线程:互斥锁与读写锁
2012-11-05 17:34 7074java线程:互斥锁与读写锁 分类: ja ... -
java线程:三种方式实现生产者消费者问题_3
2012-11-05 17:34 1331java线程:三种方式 ... -
java线程:几个实用的线程工具类
2012-11-05 15:15 8397java线程:几个实用的线程工具类 分类: ... -
java线程:三种方式实现生产者消费者问题_2
2012-11-05 14:26 1153java线程:三种方式实现生产者消费者问题_2 ... -
java ExecutorService 线程池Callable 和 Future接口
2012-08-29 21:10 1208javaEye转载(java多线程 Callable 的实现) ... -
线程并发
2012-03-31 15:41 10631:>内存模型 究竟什么是内存模型?内存模型描述了程序中 ... -
特殊的队列:BlockingQueue 使用(转)
2012-03-28 14:49 1081本例介绍一个特殊的队列:BlockingQueue,如果Blo ... -
Spring 线程池使用
2012-03-28 12:47 26111Spring 线程池使用 /** * */ 一个日志管理 ...
相关推荐
scratch少儿编程逻辑思维游戏源码-银河二号.zip
实训商业源码-GAJ内网大数据图表界面源码-毕业设计.zip
实训商业源码-传媒摄影-毕业设计.zip
少儿编程scratch项目源代码文件案例素材-足球冠军.zip
scratch少儿编程逻辑思维游戏源码-足球物理学.zip
scratch少儿编程逻辑思维游戏源码-陷阱游戏.zip
NGW行星减速器的设计 一级行星齿轮减速器.rar
Typescript教程&案例&相关项目资源,奖励仅限VIP资源
内容概要:本文详细介绍了双闭环整流器结合VOC(电压定向控制)、SVPWM(空间矢量脉宽调制)和锁相环(PLL)技术,在MATLAB Simulink环境下的仿真过程和结果。双闭环整流器由电流环和电压环组成,分别负责快速跟踪电流指令和稳定输出电压。文中提供了详细的VOC控制、SVPWM模块搭建和锁相环实现的MATLAB代码示例,并解释了每个部分的工作原理和技术要点。通过多次调试和优化参数,最终实现了700V以上30A的大功率直流输出,验证了该控制系统在高功率应用场景中的稳定性和高效性。 适合人群:从事电力电子研究的技术人员、高校相关专业师生、对电力电子控制系统感兴趣的工程技术人员。 使用场景及目标:适用于大功率直流电源的设计与开发,特别是在工业自动化、新能源发电等领域。目标是帮助读者掌握双闭环整流器的控制原理和仿真方法,提升实际项目中的设计能力和故障排除技巧。 其他说明:文中还分享了许多实用的经验和注意事项,如参数选择、模型搭建技巧、常见问题解决方法等,有助于读者更好地理解和应用这些先进技术。
实训商业源码-代网总站API后台源码-毕业设计.zip
实训商业源码-教育培训学校小程序V1.7.2 前端+后端-毕业设计.zip
实训商业源码- 深蓝健身房瑜伽馆行业V4.14.0 小程序前端+后端-毕业设计.zip
板坯连铸弧形结晶器总体设计.rar
scratch少儿编程逻辑思维游戏源码-只有一扇门 Level Devil.zip
2025最新高清电影.apk
实训商业源码-帝国知识点作文试题源码-毕业设计.zip
scratch少儿编程逻辑思维游戏源码-捉迷藏 在线游戏.zip
scratch少儿编程逻辑思维游戏源码-雪花.zip
内容概要:本文系统梳理了2025年人工智能(AI)技术的发展现状与核心突破,探讨其在医疗、教育、科研、金融等领域的跨领域应用潜力,并剖析了技术演进中的关键挑战与未来发展趋势。文章指出,AI模型架构、硬件性能及开源生态的快速发展推动了其广泛应用,但也面临数据瓶颈、伦理争议及环境成本等问题。具体而言,生成式AI实现了从文本生成到复杂推理任务的跨越,硬件性能大幅提升,开源社区工具链日益成熟。在应用方面,AI在医疗健康、教育创新、学术研究及金融智能化等领域展现出巨大潜力,但也存在模型幻觉、可解释性不足、环境成本高等挑战。未来,AI将朝着多模态融合、因果推理突破、绿色AI等方向发展,并需通过技术创新、政策引导与全球协作构建可持续的AI生态系统。; 适合人群:对人工智能技术及其应用感兴趣的科研人员、工程师、政策制定者及关注AI发展的社会各界人士。; 使用场景及目标:①了解2025年人工智能技术的核心进展与应用实例;②掌握AI在各行业中的实际应用效果及面临的挑战;③探索未来AI发展的战略方向与可持续路径。; 其他说明:本文不仅介绍了AI技术的最新进展,还深入探讨了其在不同领域的具体应用案例,强调了技术发展背后的伦理、环境和社会问题。阅读时应重点关注AI的应用潜力与挑战,并思考如何在全球协作下实现AI的可持续发展。
内容概要:本文详细介绍了基于AC7020 FPGA构建的数字锁相放大器电路图及其在高精度TDLAS(可调谐二极管激光吸收光谱)技术中的应用。首先阐述了TDLAS技术和锁相放大器之间的关系,强调了锁相放大器在提高信号信噪比方面的重要作用。接着讨论了AC7020 FPGA的特点和优势,如丰富的逻辑资源和高速数据处理能力。随后深入探讨了电路的关键组成部分,包括信号输入模块、参考信号生成模块以及乘法器与低通滤波器模块的具体实现细节。此外,还分享了一些实际设计中的经验和技巧,如时钟抖动处理、混频环节的定点数处理、CIC滤波器的级联配置、CORDIC算法的应用等。最后展示了该设计方案的实际测试效果,证明其在气体检测方面的卓越性能。 适用人群:从事光学传感、信号处理及相关领域的科研人员和技术开发者。 使用场景及目标:适用于需要高精度气体检测的场合,旨在提高TDLAS系统的检测精度和可靠性,特别是在工业环境中的应用。 其他说明:文中提供的Verilog代码片段和设计思路对于理解和实现数字锁相放大器具有重要的参考价值。同时,作者还提到了一些常见的设计陷阱和解决方案,有助于读者避开类似的问题。