多线程
文章平均质量分 89
zczpeng
技术养成中...
展开
-
Java多线程研究01-创建线程
线程与进程● 操作系统支持的线程至少会有四种状态:就绪、执行、阻塞和终结。线程在四种状态下进行切换,都是要消耗不少的CPU计算能力的。 ● 并且根据操作系统使用线程的进程的不一样,线程还分为用户线程和操作系统线程。操作系统线程(内核线程),是指操作系统内核为了完成硬件接口层操作,由操作系统内核创建的线程:例如I/O操作的内核线程,这些线程应用程序是不能干预的;用户线程,是指用户安装/管理的应用原创 2016-07-23 23:23:15 · 590 阅读 · 0 评论 -
《Java多线程编程核心技术》(四)Lock的使用
1,使用ReentrantLock类在java中,可以使用synchronized关键字来时间线程之间同步互斥,但在JDK1.5中新增加了ReentrantLock类也能达到同样的效果,并且在扩展功能上也更加强大。关键字synchronized与wait()和notify()/notifyAll()方法结合可以时间等待/通知模式,类ReentrantLock也可以实现,但需要截止Condition对原创 2016-09-25 23:50:06 · 1043 阅读 · 0 评论 -
《Java多线程编程核心技术》(三)线程通信
第三章 线程通信1,等待/通知机制 ①举个现实中的例子: (1)厨师昨晚一道菜的时间不确定,所以厨师将菜品放到“菜品传递台”上的时间也不确定。 (2)服务员取到菜的时间取决于厨师,所以服务员就有“等待”(wait)的状态。 (3)服务员如何能取到菜呢?这有得取决于厨师,厨师将菜放到“菜品传递台”上,其实就相当于一种通知(notify),这是服务员才可以拿到菜并交个就餐者。 (4)在这个过程原创 2016-09-21 22:18:40 · 1201 阅读 · 0 评论 -
《Java多线程编程核心技术》(二)对象及变量的并发访问
**第二章 对象及变量的并发访问。****1,synchronized** 多线程学习是一定会遇到的经典问题,“非线程安全”其实会在多个线程对同一个对象中的实例变量进行并发访问时发生,产生的后果就是“脏读”,也就是渠道的数据其实是被更改过的,而“线程安全”就是获得的实例变量的值是经过同步处理过的,不会出现脏读的现象。①方法内的变量为线程安全。“非线程安全”问题存在于“实例变量”中,如果是方法内部的原创 2016-09-20 23:13:57 · 806 阅读 · 0 评论 -
《Java多线程编程核心技术》(一)多线程技能
最近阅读了一本《Java多线程编程核心技术》,总结了一下每章的知识点:第一章,java多线程技能 知识点:1,实现多线程编程的方式主要有两种:一是继承Thread类,重新run方法,二是实现Runnable接口,实现run方法,对象作为构造参数传入Thread对象进行start()启动。(第二种方式支持多继承情况)2,currentThread()方法可以返回代码段正在被哪个线程调用的信息。 Th原创 2016-09-20 23:04:02 · 2051 阅读 · 0 评论 -
Java多线程研究06-带返回值的线程定义接口Callable以及Future,FutureTask的使用
带返回值的CallableJAVA线程相关的Runnable接口中的run()方法没有提供返回值,如下:......public void run() { ......}......如果需要在线程A执行完成,得到返回值后,再继续执行某个业务。那么推荐使用JDK1.5中提供的带有“执行返回值”的线程定义接口:Callable。如果还需要为多个线程的执行调度加入更复杂的控制逻辑,那么需要我原创 2016-07-25 17:56:43 · 4314 阅读 · 0 评论 -
Java多线程研究05-ThreadPoolExecutor中workQueue、threadFactory和handle
我们继续讨论ThreadPoolExecutor线程池。上篇文章给出的最简单的ThreadPoolExecutor线程池的使用方式中,我们只采用了ThreadPoolExecutor最简单的一个构造函数:public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize,原创 2016-07-24 20:08:08 · 7479 阅读 · 0 评论 -
Java多线程研究04-线程池的使用(ThreadPoolExecutor详解)
为什么要使用线程池?线程是一个操作系统概念。操作系统负责这个线程的创建、挂起、运行、阻塞和终结操作。而操作系统创建线程、切换线程状态、终结线程都要进行CPU调度——这是一个耗费时间和系统资源的事情。 另一方面,大多数实际场景中是这样的:处理某一次请求的时间是非常短暂的,但是请求数量是巨大的。这种技术背景下,如果我们为每一个请求都单独创建一个线程,那么物理机的所有资源基本上都被操作系统创建线程、切换原创 2016-07-24 19:33:58 · 1627 阅读 · 0 评论 -
Java多线程研究03-线程的基本操作(notify,notifyAll,interrupt,join,sleep)
JAVA中的基本线程操作这是前面给出的线程状态切换图例,可能还不能完全理解其中的切换条件,我们将详细介绍JAVA中如何进行这些线程状态的操作。 本文将讲解notify、notifyAll、interrupt、join和sleep等操作。notify和notifyAll操作notify方法的工作情况通过代码解释:package com.zczpeng.thread;public class Noti原创 2016-07-24 17:35:42 · 1654 阅读 · 0 评论 -
Java多线程研究02-对象锁,synchronized关键字详解
对象锁的概念通过图理解一下,多个线程要操作同一个对象的场景 图1: 图2: 图3: 解释:● 钥匙是什么,可以理解为线程的执行资格,拥有cpu时间片等资源。● 可是对象的‘锁芯’(对象独占权)只有一个,那么可以打开这把锁的多个‘钥匙’同一时间内只能有一把‘钥匙’进行操作;其他持有‘钥匙’的线程(或者没有持有钥匙的线程)都要进入等待状态;直到某把‘钥匙’从‘锁眼’中退出,操作系统会决定原创 2016-07-24 16:04:58 · 1077 阅读 · 0 评论 -
《Java多线程编程核心技术》(五)定时器Timer的使用
定时器 Timer的使用在JDK库中Timer类主要负责计划任务的功能,也就是在指定的时间开始执行某一个任务。 Timer类的主要作用就是设置计划任务,但封装任务的类确实TimerTask类。执行计划任务的代码要放到TimerTask的子类中,因为TimerTask是一个抽象类。方法schedule(TimerTask task,Date time) 该方法的作用是在指定的日期执行一次某一任务。原创 2016-09-26 16:10:20 · 743 阅读 · 0 评论