线程有五个状态,分别是新建(New).就绪(Runnable).运行(Running).阻塞(Blocked)和死亡(Dead). 新建和就绪 程序使用new会新建一个线程,new出的对象跟普通对象一样,JVM会为其分配内存,初始化成员变量等,此时线程并没有运行,而是就是新建状态. 当线程对象调用start后,线程将进入就绪状态.JVM会为其创建函数调度栈和计数器,但此时线程依然没有运行,而是等待获取CPU执行片 下面的例子可以证明当线程对象调用start后,并不一定立即执行, for (int…
线程安全问题 多个线程同时访问同一资源的时候有可能会出现信息不一致的情况,这是线程安全问题,下面是一个例子, Account.class , 定义一个Account模型 package threads.sync; public class Account { private String accountNo; private double balance; public Account() {} public Account(String accountNo, double balance) {…
线程组 Java中的ThreadGroup类表示线程组,在创建新线程时,可以通过构造函数Thread(group...)来指定线程组. 线程组具有以下特征 如果没有显式指定线程组,则新线程属于默认线程组,默认情况下,与创建线程所在的组相同 一旦确定了线程所在线程组之后,不允许更改线程组,直到线程死亡 对于线程组ThreadGroup的一个对象,就表示一个线程组,线程组通过ThreadGroup(group...)来初始化, 线程组可以通过interrput(), setDamemon(),set…
线程池概念 操作系统或者JVM创建一个线程以及销毁一个线程都需要消耗CPU资源,如果创建或者销毁线程的消耗源远远小于执行一个线程的消耗,则可以忽略不计,但是基本相等或者大于执行线程的消耗,而且需要创建大批量这种线程的话,CPU将资源将会大量消耗在创建线程和销毁线程上,这是不能接受的,因此我们需要一个集中管理线程的机制,那就是线程池. 线程池不仅仅可以预先批量创建线程,还可以管理和优化线程,一般来说,使用线程池有很多优点, 提前创建批量线程,减轻CPU负担 在必要情况下重用用过的线程,减少不必要的…
传统的线程通信 Object提供了三个方法wait(), notify(), notifyAll()在线程之间进行通信,以此来解决线程间执行顺序等问题. wait():释放当前线程的同步监视控制器,并让当前线程进入阻塞状态,直到别的线程发出notify将该线程唤醒. notify():唤醒在等待控制监视器的其中一个线程(随机).只有当前线程释放了同步监视器锁(调用wait)之后,被唤醒的线程才有机会执行. notifyAll():与上面notify的区别是同时唤醒多个等待线程. 值得注意的是这三…
1.扩展Java.lang.Thread类 1.1.进程和线程的区别: 进程:每个进程都有自己独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1~n个线程. 线程:同一类线程共享代码和数据空间,每一个线程有独立的运行栈和程序计数器,线程切换开销比较小. 进程和线程一样都分为五个阶段:创建.就绪.运行.阻塞.终止. 多进程是指操作系统能同时运行多个任务(程序). 多线程是指在同一个程序中有多个顺序流在执行. 1.2.在Java中要想实现多线程,有两种方法:继承Threa…
一.线程的生命周期 线程状态转换图: 1.新建状态 用new关键字和Thread类或其子类建立一个线程对象后,该线程对象就处于新生状态.处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态(runnable). 注意:不能对已经启动的线程再次调用start()方法,否则会出现java.lang.IllegalThreadStateException异常. 2.就绪状态 处于就绪状态的线程已经具备了运行条件,但还没有分配到CPU,处于线程就绪队列(尽管是采用队列形式,事实上,把它…
线程可以分为4个状态:New(新生),Runnable(可运行):为了方便分析,还可将其分为:Runnable与Running.blocked(被阻塞),Dead(死亡). 与人有生老病死一样,线程也同样要经历开始(等待).运行.挂起和停止四种不同的状态.这四种状态都可以通过Thread类中的方法进行控制.下面给出了Thread类中和这四种状态相关的方法. // 开始线程 public void start( ); public void run( ); // 挂起和唤醒线程 public vo…
线程概述 在应用程序中,不同的程序块是可以同时运行的,这种多个程序块同时运行的现象被称作并发执行. 多线程可以使程序在同一时间内完成很多操作. 多线程就是指一个应用程序中有多条并发执行的线索,每条线索都被称作一个线程 进程Process 在一个操作系统中,每个独立执行的程序都可称之为一个进程,也就是“正在运行的程序”. 线程Thread 一个程序至少有一个进程,一个进程至少有一个线程.进程在执行过程中拥有独立的内存单元 在java中一个正在执行的程序.程序运行中至少有两个线程在运行,一个是主函数…
新建状态: 一个新产生的线程从新状态开始了它的生命周期.它保持这个状态直到程序 start 这个线程. 运行状态:当一个新状态的线程被 start 以后,线程就变成可运行状态,一个线程在此状态下被认为是开始执行其任务 就绪状态:当一个线程等待另外一个线程执行一个任务的时候,该线程就进入就绪状态.当另一个线程给就绪状态的线程发送信号时,该线程才重新切换到运行状态. 休眠状态: 由于一个线程的时间片用完了,该线程从运行状态进入休眠状态.当时间间隔到期或者等待的时间发生了,该状态的线程切换到运行状态.…