多线程的基本概念及实现方式
2014-08-26 10:08
253 查看
程序
程序是一个静态的概念
进程
进程是一个动态的概念,程序在内存中的一次运行叫做进程,进程是以程序为蓝本运行,有独立的地址空间。进程是资源分配的基本单位
线程
线程在进程之中,多个线程共享同一个进程的资源。具有自己独立的执行流。
多进程并发
按照时间片的轮转来占用CPU
并行
同时执行
乐谱->程序
音乐会(一次演奏)->进程
某个演奏家->线程
在J***A中实现多线程有两种方式
1、继承Thread
Thread(String name) 分配新的 Thread 对象。
Thread(Runnable target)
Thread常用方法
long getId() 返回该线程的标识符。
String getName() 返回该线程的名称。
int getPriority() 返回线程的优先级。
boolean isAlive() 测试线程是否处于活动状态。
void join() 等待该线程终止。
void run()
static void sleep(long millis)
void start()
static void yield()
通过继承Thread来实现多线程:
1)继承Thread
2)重写run方法
3)调用线程对象的start方法
注意:
1)在写多线程的时候,不能直接调用run方法,会把run方法当做普通的方法来运行
2、实现Runnable接口
1)编写一个实现Runnable接口的类
2)通过该类的对象来构造一个Thread对象
3)绑定对象,调用Thread对象的start()方法
两种线程的实现方式比较
1、通过继承Thread,由于J***A是单继承,那该不能继承自其它类,这样灵活性较差
2、可以共享数据
线程的生命周期
新建(当new出一个线程对象的时候,处于新建状态)
就绪(当线程调用start方法,处于就绪状态,等待分配CPU,一旦获取CPU,立马执行,时间片用完,重新转入就绪状态,等待分配CPU)
运行(当就绪的线程获取CPU后,转入运行状态)
阻塞(等待获取其它的资源等情况)
死亡(run方法执行结束,或者发生异常)
线程优先级
通过public final int getPriority()获取线程的优先级
通过public final void setPriority(int newPriority)设置线程优先级
线程的优先级分为1-10级,其中主线程是5
线程中提供了三个静态变量来表示线程优先级程度
join
当一个线程正在运行的时候,把另外一个线程join进来,需要先把join进来的线程执行完,才能让原来的线程继续执行下去
yield
在线程运行的过程中,可以让出线程,由系统重新进行调度。让出线程不等于线程被阻塞
(线程休眠是阻塞),进入就绪状态
后台线程
后台线程为其它线程进行服务,相对于前台线程,例如垃圾回收器就是一个后台线程。当前台线程运行结束,后台线程没有必要存在,运行也会到此结束
线程安全问题
因为在执行了部分代码后,另一个进程接入
使用同步代码块
synchroized(对象){
需要被同步的代码;
}
程序是一个静态的概念
进程
进程是一个动态的概念,程序在内存中的一次运行叫做进程,进程是以程序为蓝本运行,有独立的地址空间。进程是资源分配的基本单位
线程
线程在进程之中,多个线程共享同一个进程的资源。具有自己独立的执行流。
多进程并发
按照时间片的轮转来占用CPU
并行
同时执行
乐谱->程序
音乐会(一次演奏)->进程
某个演奏家->线程
在J***A中实现多线程有两种方式
1、继承Thread
Thread(String name) 分配新的 Thread 对象。
Thread(Runnable target)
Thread常用方法
long getId() 返回该线程的标识符。
String getName() 返回该线程的名称。
int getPriority() 返回线程的优先级。
boolean isAlive() 测试线程是否处于活动状态。
void join() 等待该线程终止。
void run()
static void sleep(long millis)
void start()
static void yield()
通过继承Thread来实现多线程:
1)继承Thread
2)重写run方法
3)调用线程对象的start方法
注意:
1)在写多线程的时候,不能直接调用run方法,会把run方法当做普通的方法来运行
2、实现Runnable接口
1)编写一个实现Runnable接口的类
2)通过该类的对象来构造一个Thread对象
3)绑定对象,调用Thread对象的start()方法
两种线程的实现方式比较
1、通过继承Thread,由于J***A是单继承,那该不能继承自其它类,这样灵活性较差
2、可以共享数据
线程的生命周期
新建(当new出一个线程对象的时候,处于新建状态)
就绪(当线程调用start方法,处于就绪状态,等待分配CPU,一旦获取CPU,立马执行,时间片用完,重新转入就绪状态,等待分配CPU)
运行(当就绪的线程获取CPU后,转入运行状态)
阻塞(等待获取其它的资源等情况)
死亡(run方法执行结束,或者发生异常)
线程优先级
通过public final int getPriority()获取线程的优先级
通过public final void setPriority(int newPriority)设置线程优先级
线程的优先级分为1-10级,其中主线程是5
线程中提供了三个静态变量来表示线程优先级程度
join
当一个线程正在运行的时候,把另外一个线程join进来,需要先把join进来的线程执行完,才能让原来的线程继续执行下去
yield
在线程运行的过程中,可以让出线程,由系统重新进行调度。让出线程不等于线程被阻塞
(线程休眠是阻塞),进入就绪状态
后台线程
后台线程为其它线程进行服务,相对于前台线程,例如垃圾回收器就是一个后台线程。当前台线程运行结束,后台线程没有必要存在,运行也会到此结束
线程安全问题
因为在执行了部分代码后,另一个进程接入
使用同步代码块
synchroized(对象){
需要被同步的代码;
}
相关文章推荐
- UI 实现多线程方式之四 GCD概念
- Java多线程系列-实现多线程的最基本两种方式
- java 实现多线程的三种基本方式
- java 多线程学习笔记1-概念,实现方式
- 队列的基本操作概念及各种实现方式的代码
- 黑马程序员--04.多线程--01.【线程的基本概念】【线程的创建方式】
- 线程概念,状态及状态之间的关系,实现多线程方法,实现同步线程的方式
- 多线程一(简单的概念与实现方式)
- SVM 基本概念及Python实现方式
- 多线程基本概念及编程实现
- Java第七课 Java的多线程程序进程和线程的概念,实现多线程的两种方式,线程同步的原理,线程的死锁,运用wait和notify来实现producer - consumer关系,线程终止的两种情况。
- spring之AOP基本概念和AOP的三种实现方式
- C++基本概念在编译器中的实现
- Java编程那些事儿94——多线程实现方式1
- Java编程那些事儿95——多线程实现方式2
- NHibernate自定义集合类型(上):基本实现方式
- java多线程几个方法的基本概念
- 多线程学习-线程基本概念及线程创建--发布日期:2008-07-16 23:19
- Windows多线程编程 [1] 基本概念