JAVA基础知识之多线程——线程池】的更多相关文章

线程池概念 操作系统或者JVM创建一个线程以及销毁一个线程都需要消耗CPU资源,如果创建或者销毁线程的消耗源远远小于执行一个线程的消耗,则可以忽略不计,但是基本相等或者大于执行线程的消耗,而且需要创建大批量这种线程的话,CPU将资源将会大量消耗在创建线程和销毁线程上,这是不能接受的,因此我们需要一个集中管理线程的机制,那就是线程池. 线程池不仅仅可以预先批量创建线程,还可以管理和优化线程,一般来说,使用线程池有很多优点, 提前创建批量线程,减轻CPU负担 在必要情况下重用用过的线程,减少不必要的…
线程组 Java中的ThreadGroup类表示线程组,在创建新线程时,可以通过构造函数Thread(group...)来指定线程组. 线程组具有以下特征 如果没有显式指定线程组,则新线程属于默认线程组,默认情况下,与创建线程所在的组相同 一旦确定了线程所在线程组之后,不允许更改线程组,直到线程死亡 对于线程组ThreadGroup的一个对象,就表示一个线程组,线程组通过ThreadGroup(group...)来初始化, 线程组可以通过interrput(), setDamemon(),set…
传统的线程通信 Object提供了三个方法wait(), notify(), notifyAll()在线程之间进行通信,以此来解决线程间执行顺序等问题. wait():释放当前线程的同步监视控制器,并让当前线程进入阻塞状态,直到别的线程发出notify将该线程唤醒. notify():唤醒在等待控制监视器的其中一个线程(随机).只有当前线程释放了同步监视器锁(调用wait)之后,被唤醒的线程才有机会执行. notifyAll():与上面notify的区别是同时唤醒多个等待线程. 值得注意的是这三…
线程安全问题 多个线程同时访问同一资源的时候有可能会出现信息不一致的情况,这是线程安全问题,下面是一个例子, Account.class , 定义一个Account模型 package threads.sync; public class Account { private String accountNo; private double balance; public Account() {} public Account(String accountNo, double balance) {…
线程有五个状态,分别是新建(New).就绪(Runnable).运行(Running).阻塞(Blocked)和死亡(Dead). 新建和就绪 程序使用new会新建一个线程,new出的对象跟普通对象一样,JVM会为其分配内存,初始化成员变量等,此时线程并没有运行,而是就是新建状态. 当线程对象调用start后,线程将进入就绪状态.JVM会为其创建函数调度栈和计数器,但此时线程依然没有运行,而是等待获取CPU执行片 下面的例子可以证明当线程对象调用start后,并不一定立即执行, for (int…
新建状态: 一个新产生的线程从新状态开始了它的生命周期.它保持这个状态直到程序 start 这个线程. 运行状态:当一个新状态的线程被 start 以后,线程就变成可运行状态,一个线程在此状态下被认为是开始执行其任务 就绪状态:当一个线程等待另外一个线程执行一个任务的时候,该线程就进入就绪状态.当另一个线程给就绪状态的线程发送信号时,该线程才重新切换到运行状态. 休眠状态: 由于一个线程的时间片用完了,该线程从运行状态进入休眠状态.当时间间隔到期或者等待的时间发生了,该状态的线程切换到运行状态.…
1.扩展Java.lang.Thread类 1.1.进程和线程的区别: 进程:每个进程都有自己独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1~n个线程. 线程:同一类线程共享代码和数据空间,每一个线程有独立的运行栈和程序计数器,线程切换开销比较小. 进程和线程一样都分为五个阶段:创建.就绪.运行.阻塞.终止. 多进程是指操作系统能同时运行多个任务(程序). 多线程是指在同一个程序中有多个顺序流在执行. 1.2.在Java中要想实现多线程,有两种方法:继承Threa…
以下内容转自http://ifeve.com/thread-pools/: 线程池(Thread Pool)对于限制应用程序中同一时刻运行的线程数很有用.因为每启动一个新线程都会有相应的性能开销,每个线程都需要给栈分配一些内存等等. 我们可以把并发执行的任务传递给一个线程池,来替代为每个并发执行的任务都启动一个新的线程.只要池里有空闲的线程,任务就会分配给一个线程执行.在线程池的内部,任务被插入一个阻塞队列(Blocking Queue ),线程池里的线程会去取这个队列里的任务.当一个新任务插入…
一.什么是进程?什么是线程? 操作系统可以同时支持多个程序的运行,而一个程序可以狭义的认为就是一个进程.在一个进程的内部,可能包含多个顺序执行流,而每个执行流就对应一个线程. 1.1.进程 进程:是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位.当程序进入内存运行时,即为开启了一个进程. 进程的特点: 独立性:进程是系统中独立的实体,可以拥有独立的资源 动态性:进程是动态的,它有自己的生命周期 并发性:多个进程可以并发运行,互不影响 并发性和并行性是不同的概念:…
前段时间自己研究了下线程池的实现原理,通过一些源码对比,发现其实核心的东西不难,于是抽丝剥茧,决定自己实现一个简单线程池,当自已实现了出一个线程池后.发现原来那么高大上的东西也可以这么简单. 先上原理图:为了更好的在手机上显示,我重新把图画了一遍 上代码之前,要先补充一下线程池构造的核心几个点 线程池里的核心线程数与最大线程数 线程池里真正工作的线程worker 线程池里用来存取任务的队列BlockingQueue 线程中的任务task 本例实现简化了一些,只实现了BlockingQueue存放…