Thread 线程(1)
来源:互联网 发布:剑侠情缘mac版 编辑:程序博客网 时间:2024/05/18 01:29
线程是程序执行流的最小单元,一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。
一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。
线程也有就绪、阻塞和运行三种基本状态。就绪状态是指线程具备运行的所有条件,逻辑上可以运行,在等待处理机;运行状态是指线程占有处理机正在运行;阻塞状态是指线程在等待一个事件(如某个信号量),逻辑上不可执行。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。
Java线程具有五中基本状态:
新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread();
就绪状态(Runnable):当调用线程对象的start()方法(t.start();),线程即进入就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待CPU调度执行,并不是说执行了t.start()此线程立即就会执行;
运行状态(Running):当CPU开始调度处于就绪状态的线程时,此时线程才得以真正执行,即进入到运行状态。注:就 绪状态是进入到运行状态的唯一入口,也就是说,线程要想进入运行状态执行,首先必须处于就绪状态中;
阻塞状态(Blocked):处于运行状态中的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,此时进入阻塞状态,直到其进入到就绪状态,才 有机会再次被CPU调用以进入到运行状态。根据阻塞产生的原因不同,阻塞状态又可以分为三种:
1.等待阻塞:运行状态中的线程执行wait()方法,使本线程进入到等待阻塞状态;
2.同步阻塞 -- 线程在获取synchronized同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态;
3.其他阻塞 -- 通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。
死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。
线程的实现方式:
1.继承Thread类,重子类写该类的run()方法。
class PrimeThread extends Thread { long minPrime; PrimeThread(long minPrime) { this.minPrime = minPrime; } public void run() { // compute primes larger than minPrime . . . }}创建并启动一个线程
PrimeThread p = new PrimeThread(143);p.start();
2、创建声明实现 Runnable 接口的类
class PrimeRun implements Runnable { long minPrime; PrimeRun(long minPrime) { this.minPrime = minPrime; } public void run() { // compute primes larger than minPrime . . . }}创建并启动一个线程
PrimeRun p = new PrimeRun(143); new Thread(p).start();
- Thread 线程(1)
- Delphi Thread 线程(1)
- 线程(1)----Thread的方法函数
- 线程Thread-----方法(1)-----继承:
- 线程Thread总结1
- 线程Thread学习1
- 1、线程基础--Thread
- Thread(线程)详解1
- 线程(thread)
- 线程(thread)技术
- 线程(thread)介绍
- 线程(thread)
- Thread 线程(三)
- Thread (线程)(杂记)
- 线程(thread)
- 线程(Thread)
- C++线程Thread类库1
- [Android]Thread线程入门1
- warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead.
- swift 整个项目竖屏,某个页面横屏
- HackerRank: Sam and sub-strings
- Java中long和Long有什么区别(转)
- 【zzulioj 1918 二分图】
- Thread 线程(1)
- UVALive 7454 Parentheses
- vimrc文件迁移到别的机器报错
- css选择器
- MONGODB学习笔记一:入门
- 一般处理程序访问session
- 使用Jenkins搭建iOS/Android持续集成打包平台
- 用JavaScript写一个类似于windows的气泡屏保效果
- 【u022】车的放置