- 1、本文档共3页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Thread概述
Thread概述
每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。
线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。通常由操作系统负责多个线程的调度和执行。
线程是程序中一个单一的顺序控制流程,在单个程序中同时运行多个线程完成不同的工作,称为多线程。
线程和进程的区别在于,多个进程有不同的代码和数据空间,而多个线程则共享数据空间。但是,每个线程有自己的执行堆栈和程序计数器。
多线程是为了“同时”完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。
一个采用了多线程技术的应用程序可以更好地利用系统资源。其主要优势在于充分利用了CPU的空闲时间片,可以用尽可能少的时间来对用户的要求做出响应,使得进程的整体运行效率得到较大提高,同时增强了应用程序的灵活性。更为重要的是,由于同一进程的所有线程是共享同一内存,所以不需要特殊的数据传送机制,不需要建立共享存储区或共享文件,从而使得不同任务之间的协调操作与运行、数据的交互、资源的分配等问题更加易于解决。
优点:
使用线程可以把占据时间长的程序中的任务放到后台去处理
用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度。
程序的运行速度可能加快。
在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,多线程就比较有用了,在这种情况下可以充分利用CPU的时间。
多线程技术在Android,iOS软件开发中有举足轻重的位置。
缺点:
如果有大量的线程,会影响性能,因为操作系统需要在它们之间切换。
更多的线程需要更多的内存空间。
线程可能会给程序带来更多“bug”,因此要小心使用。
线程的中止需要考虑其对程序运行的影响。
通常块模型数据是在多个线程间共享的,需要防止线程死锁情况的发生。
?
java中的多线程
在Java中要想实现多线程,有两种手段,一种是继承Thread类,另外一种是实现Runnable接口。
对于直接继承Thread的类来说,代码大致框架如下例所示:
class MyThread extends Thread{
private int count = 5;
public MyThread() {
// TODO Auto-generated constructor stub
}
public MyThread(String threadName){
super(threadName);
}
@Override
public void run() {
for(int i = 1; i = 5; i++){
System.out.println(getName() + :+ count--);
try {
sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
?
public class InheritThread {
public static void main(String[] args) {
//如下,通过构建两个Thread来“代理”同一个MyThread线程对象
//亦可实现多线程共享成员数据
//稍有不同的是:线程名称不能更改。
MyThread mt = new MyThread(A);
Thread t1 = new Thread(mt);
Thread t2 = new Thread(mt);
t1.start();
t2.start();
System.out.println(InheritThread ok.);
}
}
?
对于直接继承Thread的类来说,代码大致框架如下例所示:
class MyRunnable implements Runnable{
private int count = 5;
@Override
public void run() {
for(int i = 1; i = 5; i++){
System.out.println(Thread.currentThread().getName() + :+ count--);
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
?
public class InheritRunnable {
public static void main(String[] ar
文档评论(0)