多线程初步
来源:互联网 发布:python编写界面 编辑:程序博客网 时间:2024/05/22 04:53
¯ 程序与进程
µ 程序:一段静态的代码。
µ 进程:程序的一次动态执行过程,它对应从代码加载、执行到执行完毕的一个完整过程。
µ 进程也称任务,支持多个进程同时执行的OS就被称为多进程OS或多任务OS。
进程与内存的关系示意图:
¯ 进程与线程
µ 在一个程序内部也可以实现多个任务并发执行,其中每个任务称为线程。
µ 线程是比进程更小的执行单位,它是在一个进程中独立的控制流,即程序内部的控制流。
µ 特点:线程不能独立运行,必须依赖于进程,在进程中运行。
µ 每个程序至少有一个线程称为主线程。
µ 单线程:只有一条线程的进程称为单线程
µ 多线程:有不止一个线程的进程称为多线程
线程示意图:
从上图可以看出进程可以包括很多进程以提高程序运行的效率。
¯ 开启多线程的优点和缺点
µ 提高界面程序响应速度。
µ 充分利用系统资源,提高效率。
µ 当程序中的线程数量比较多时,系统将花费大量的时间进行线程的切换,这反而会降低程序的执行效率。
但是,相对于优势来说,劣势还是很有限的,所以现在的项目开发中,多线程编程技术得到了广泛的应用。
实现多线程的两种常用的方法:
ü 继承Thread类
class MyThread extends Thread{
public void run(){
//线程体
}
}
MyThread tt1 = new MyThread ();
//启动线程
tt1.start();
try{
for(int i = 0;i < 5;i++){
//延时1秒
Thread.sleep(1000);
System.out.println("Main:" + i);
}
}catch(Exception e){}
ü 实现Runnable接口
class MyThread2 implements Runable{
public void run(){} //重写Runable接口中的run()方法
}
MyThread2 mt1=new MyThread2();
Thread t1=new Thread(mt1);
t1.start();
线程的生命周期:
µ 新建(new Thread)
当创建Thread类的一个实例(对象)时,此线程进入新建状态(未被启动)。
µ 就绪(runnable)
线程已经被启动,正在等待被分配给CPU时间片,也就是说此时线程正在就绪队列中排队等候得到CPU资源。
µ 运行(running)
线程获得CPU资源正在执行任务(run()方法),此时除非此线程自动放弃CPU资源或者有优先级更高的线程进入,线程将一直运行到结束。
µ 死亡(dead)
当线程执行完毕或被其它线程杀死,线程就进入死亡状态,这时线程不可能再进入就绪状态等待执行。
µ 自然终止:正常运行run()方法后终止
µ 异常终止:调用stop()方法让一个线程终止运行
µ 堵塞(blocked)
由于某种原因导致正在运行的线程让出CPU并暂停自己的执行,即进入堵塞状态。
µ 正在睡眠:用sleep(long t)方法可使线程进入睡眠方式。一个睡眠着的线程在指定的时间过去可进入就绪状态。
µ 正在等待:调用wait()方法。(调用notify()方法回到就绪状态)
µ 被另一个线程所阻塞:调用suspend()方法。
- 多线程初步
- 多线程初步
- 多线程初步
- 多线程初步
- Java多线程编程初步
- .net 多线程初步(1)
- .net 多线程初步(2)
- 多线程学习初步
- 多线程学习初步
- linux多线程初步
- java 多线程初步
- Java多线程编程初步
- 多线程学习初步
- 多线程学习初步
- Windows多线程程序设计初步
- Java多线程编程初步
- 多线程初步练习
- Java多线程程序设计初步
- find -exec -ok 的用法 -mtime
- crtdbg.h: No such file or directory
- C long2a
- Node, Edge and Graph Attributes
- msgget & msgsnd
- 多线程初步
- 跟我一起写 Makefile
- Javascript --RegExp
- Spring AOP—2、Spring中的AOP能为我们做些什么
- Windows快捷键及应用技巧
- 游戏程序员养成计划 (更新2010.11.6)
- 线程总结
- XML学习笔记
- MySQL学习笔记