线程1_20110905
来源:互联网 发布:海岛奇兵民房升级数据 编辑:程序博客网 时间:2024/05/01 17:29
今天我们开始学第十三章内容多线程。大体内容为多线程的概念和线程的生命周期、线程的创建与同步。
老师说学习多线程最主要的就是理解四个词,即并发、并行、进程与线程。
程序与进程
程序:一段静态的代码。
进程:程序的一次动态执行过程,它对应从代码加载、执行到执行完毕的一个完整过程。
线程是比进程更小的执行单位,它是在一个进程中独立的控制流,即程序内部的控制流。
特点: 线程不能独立运行,必须依赖于进程,在进程中运行。
每个程序至少有一个线程称为主线程。
单线程:只有一条线程的进程称为单线程
多线程:有不止一个线程的进程称为多线程
线程类(Thread)
java.lang包中提供了一个专门的线程类(Thread),在该类中封装了许多对线程进行调度和处理的方法。
class 类名 extends Thread
{
public void run()
{
//线程体
}
}
线程的生命周期
线程是一个动态执行的过程,它也有一个从产生到死亡的过程,这就是所谓的生命周期。
一个线程在它的生命周期内有5种状态:
新建(new Thread):当创建Thread类的一个实例(对象)时,此线程进入新建状态(未被启动)。
就绪(runnable):线程已经被启动,正在等待被分配给CPU时间片,也就是说此时线程正在就绪队列中排队等候得到CPU资源。
运行(running):线程获得CPU资源正在执行任务(run()方法),此时除非此线程自动放弃CPU资源或者有优先级更高的线程进入,线程将一直运行到结束。
死亡(dead):当线程执行完毕或被其它线程杀死,线程就进入死亡状态,这时线程不可能再进入就绪状态等待执行。
自然终止:正常运行run()方法后终止
异常终止:调用stop()方法让一个线程终止运行
堵塞(blocked):由于某种原因导致正在运行的线程让出CPU并暂停自己的执行,即进入堵塞状态。
正在睡眠:用sleep(long t) 方法可使线程进入睡眠方式。一个睡眠着的线程在指定的时间过去可进入就绪状态。
正在等待:调用wait()方法。(调用notify()方法回到就绪状态)
被另一个线程所阻塞:调用suspend()方法。(调用resume()方法恢复)
线程的创建
创建线程有两种方法:
创建Thread类的子类;
创建一个类实现Runnable接口
Thread类
构造方法
public Thread()
public Thread(Runnable target)
public Thread(String name)
public Thread(Runnable target,String name)
Runnable接口
该接口中只有一个抽象的方法run(),该方法可以被运行时系统自动识别,并被运行时系统自动调用执行。
public class 类名 implements Runnable
{ …
public void run()
{ … … }
}
Thread t1=new Thread(Runnable target );
利用Timer TimerTask
创建:创建TimerTask的子类,并实现run()方法得到时钟器任务类
MyTimerTask extends TimerTask{
public void run(){
}
}
启动:创建时钟器Timer对象
利用时钟器对象的schedule()方法启动线程任务
Timer timer = new Timer();
timer.schedule(new MyTimerTask(), ....,...);
- 线程1_20110905
- Java线程模型、线程状态 - 线程(1)
- 线程1
- 线程1
- 线程(1)
- 线程1
- 线程1
- 线程(1)
- 线程1
- 线程1
- 线程1
- 线程(1)
- 线程1
- 线程(1)----线程停止
- Linux 线程(1):线程概述
- java 线程1 线程分类
- 【线程】Java线程(1)-线程基本理解and实现方式
- Linux线程(1): 线程的创建
- 最长公共子串LCS
- 最长公共子序列
- trace “hello world”
- 搭建android开发环境
- 13.3线程的生命周期与线程状态
- 线程1_20110905
- Android音频流程一(JNI部分)
- 线程2_20110906
- 第十三章 多线程 第二讲
- HTML5新的数字输入控件
- CDMA短信接收PDU串分析
- 用do while来编写一元二次方程
- C 函数中调用Lua函数时,对于lua_pcall使用的困惑
- Android音频流程二(Binder部分)