随笔分类 -  并发编程实战

摘要:1、线程池简介: 多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。 假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中执行任务的时间,T3 销毁线程时间。 如果:T1 + T3 远大于 T2,则可以采用线程池,以提 阅读全文
posted @ 2017-10-25 11:37 竹马今安在 阅读(359) 评论(0) 推荐(0)
摘要:原文链接:http://ifeve.com/executor-framework-thread-pool-task-execution-part-01/ 内容综述 基于Executor接口中将任务提交和任务执行解耦的设计,ExecutorService和其各种功能强大的实现类提供了非常简便方式来提交 阅读全文
posted @ 2017-10-25 11:30 竹马今安在 阅读(669) 评论(0) 推荐(0)
摘要:原文地址:http://ifeve.com/executor-framework-thread-pool-task-execution-part-02/ 上一篇文章中通过引入的一个例子介绍了在Executor框架下,提交一个任务的过程,这个过程就像我们老大的老大要找个老大来执行一个任务那样简单。并通 阅读全文
posted @ 2017-10-25 11:30 竹马今安在 阅读(468) 评论(0) 推荐(0)
摘要:编写多线程程序是为了实现多任务的并发执行,从而能够更好地与用户交互。一般有四种方法,Thread,Runnable,Callable,使用Executor框架来创建线程池。 Runnable和Callable的区别是,(1)Callable规定的方法是call(),Runnable规定的方法是run 阅读全文
posted @ 2017-10-25 10:23 竹马今安在 阅读(38013) 评论(2) 推荐(5)
摘要:我们常用wait(),notify()和notifyAll()方法来进行线程间通信。线程检查一个条件后就行进入等待状态,例如,在“生产者-消费者”模型中,生产者线程发现缓冲区满了就等待,消费者线程通过消费一个产品使得缓冲区有空闲并通知生产者线程。notify()或notifyAll()的调用给一个或 阅读全文
posted @ 2017-08-19 16:05 竹马今安在 阅读(1027) 评论(0) 推荐(0)
摘要:1.ReentrantLock类 1.使用ReentrantLock类也可以实现使用synchroized的互斥效果,并且使用起来有很多地方更灵活。 用法如下 使用ReentrantLock在基本的功能上和synchroized一样,调用lock.lock(),就像获得了一个“对象监视器”,直到它l 阅读全文
posted @ 2017-08-19 16:03 竹马今安在 阅读(236) 评论(0) 推荐(0)
摘要:第一种解释: 功能差不多,都用来进行线程控制,他们最大本质的区别是:sleep()不释放同步锁,wait()释放同步缩. 还有用法的上的不同是:sleep(milliseconds)可以用时间指定来使他自动醒过来,如果时间不到你只能调用interreput()来强行打断;wait()可以用notif 阅读全文
posted @ 2017-08-18 16:24 竹马今安在 阅读(513) 评论(0) 推荐(0)
摘要:1.等待/通知机制 什么是等待、通知呢? 就比如说有一家餐厅,厨师负责做饭,服务员负责上菜,当菜在做的时候,服务员就需要等待,想象一下,假如没有通知,服务员就要每过一会过去看看菜到底做好没有,而这时候前面也有很多工作需要他做,这样他就会多做很多无用功,那么有了通知以后,厨师做完菜以后,就摁下喇叭或者 阅读全文
posted @ 2017-08-18 16:14 竹马今安在 阅读(206) 评论(0) 推荐(0)
摘要:当多个线程涉及到共享数据的时候,就会设计到线程安全的问题。非线程安全其实会在多个线程对同一个对象中的实例变量进行并发访问时发生,产生的后果就是“脏读”。发生脏读,就是取到的数据已经被其他的线程改过了。什么是线程安全呢?用并发编程实战里面的一段话解释说: 这里需要注意的是多个线程,如果一个线程肯定是线 阅读全文
posted @ 2017-08-17 17:46 竹马今安在 阅读(6850) 评论(0) 推荐(0)
摘要:1.什么是进程?什么是线程? 我们可以把计算机上每一个正在进行的任务看做一个进程,比如说听音乐、做PPT、玩游戏等等。进程是受操作系统管理的基本运行单元。 而什么是线程呢? 线程是进程中独立的子部分,可以共享进程中的资源,而又有自己的小秘密。就如同进程在计算中一样的地位,所以也叫“轻量级的进程” 2 阅读全文
posted @ 2017-08-12 20:47 竹马今安在 阅读(244) 评论(0) 推荐(0)
摘要:得到运行结果 为什么呢? 首先要明白thread和t1是两个完全不同的类,他俩之间唯一的联系就是thread作为一个target传递给了t1,hello thread = new hello();运行这句话的时候会调用hello的构造方法,Thread.currentThread().getName 阅读全文
posted @ 2017-08-07 18:12 竹马今安在 阅读(4057) 评论(1) 推荐(1)
摘要:我们并不希望对每一次内存访问都进行分析以确保程序时线程安全的,而是希望将一些现有的线程安全组件组合为更大规模的组件或程序 1.设计线程安全的类 设计过程中,需要包含以下三个基本要素 1.找出构成对象状态的所有变量 2.找出约束状态变量的不变性条件 3.建立对象状态的并发访问管理策略 分析对象的状态, 阅读全文
posted @ 2017-07-17 16:15 竹马今安在 阅读(152) 评论(0) 推荐(0)
摘要:1.可见性:我们不仅希望防止某个线程正在使用对象状态而另一个线程在同时修改该状态,而且希望确保当一个线程修改了对象状态后,其他线程能够看到发生的状态 变化。 NoVisibility可能会持续循环下去,因为读线程可能永远都看不到ready的值。还有一种情况下,可能会输出0,他看到了ready,却没有 阅读全文
posted @ 2017-07-17 08:59 竹马今安在 阅读(388) 评论(0) 推荐(0)