2013-11-08
线程是程序中一个单一的顺序控制流程.在单个程序中同时运行多个线程完成不同的工作,称为多线程.
线程和进程的区别在于,子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文.多线程主要是为了节约CPU时间,发挥利用,根据具体情况而定. 线程的运行中需要使用计算机的内存资源和CPU
线程的周期
新建 就绪 运行 阻塞 死亡
线程调度与优先级
有线程进入了就绪状态,需要有线程调度程序来决定何时执行,根据优先级来调度.
线程组
每个线程都是一个线程组的一个成员,线程组把多个线程集成一个对象,通过线程组可以同时对其中的多个线程进行操作.在生成线程时必须将线程放在指定的线程组,也可以放在缺省的线程组中,缺省的就是生成该线程的线程所在的线程组.一旦一个线程加入了某个线程组,不能被移出这个组.
守护线程
是特殊的线程,一般用于在后台为其他线程提供服务.
isDaemon():判断一个线程是否为守护线程.
set Daemon():设置一个线程为守护线程.
Thread类和Runnable接口
Thread类
类Thread在包java.lang中定义,它的构造方法如下:
public Thread();
public Thread(Runnable target);
public Thread(Runnable target,String name);
public Thread(String name);
public Thread(ThreadGroup group,Runnable target);
public Thread(ThreadGroup group, String name);
主要方法
isActive() 判断是否处于执行状态
Suspend() 暂停执行
reSume 恢复执行
start() 开始执行
Stop() 停止执行
sleep() 睡眠
run() 程序体
yield() 向其他线程退让运行权
线程优先级
Public statuc final int MAX_PRIORITY最高优先级,10
Public statuc final int MIN_PRIORITY最低优先级,1
Public statuc final int NORM_PRIORITY普通优先级,5
Runnable接口
Runnable接口中只定义了一个方法run()作为线程体,
void run()
Java的线程是通过java.lang.Thread类来实现的。
VM启动时会有一个由主方法(public static void main(){})所定义的线程。
可以通过创建Thread的实例来创建新的线程。
每个线程都是通过某个特定的Thread对象所对应的方法run()来完成其操作的,方法run()称为线程体。
通过调用Thread类的start()方法来启动一个线程
Java里面实现多线程,有2个方法
1 继承 Thread类,比如
class MyThread extends Thread {
public void run() {
// 这里写上线程的内容
}
public static void main(String[] args) {
// 使用这个方法启动一个线程
new MyThread().start();
}
}
2 实现 Runnable接口
class MyThread implements Runnable{
public void run() {
// 这里写上线程的内容
}
public static void main(String[] args) {
// 使用这个方法启动一个线程
new Thread(new MyThread()).start();
}
}
一般鼓励使用第二种方法,应为Java里面只允许单一继承,但允许实现多个接口。第二个方法更加灵活。
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
就是你看见任务管理器的有一个浏览器正在运行,但是他的进程一般是一个网页一个进程 你可以右键切换到进程查看。
线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。就绪状态是指线程具备运行的所有条件,逻辑上可以运行,在等待处理机;运行状态是指线程占有处理机正在运行;阻塞状态是指线程在等待一个事件(如某个信号量),逻辑上不可执行。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。
线程是程序中一个单一的顺序控制流程。进程内有一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指令运行时的程序的调度单位。在单个程序中同时运行多个线程完成不同的工作,称为多线程。
java中,一个类可以创造出很多对象,但是每个对象所分配的内存空间地址是不同的,除用static和直接分配的字符串,因为这两个是分配在静态数据区的,所有该类对象只有这一个地址纸向。
而线程可以看成是对一个对象的指向,就是说一个线程就可以看成是开启它的对象,而一个对象可以开启很多线程,那么这么多线程都可以看成是这个对象。与上面说的,一个类可以创造出很多对象这个很相似,但是不同的是,一个类所构造出的所有对象的非静态属性是不同的,且不会相互影响,而由一个对象所开启的所有线程使用的则是同一份成员属性,简言之就是该对象开启的所有线程中,任意一个线程对某个成员属性进行修改,那么其他任意一个线程再对这个成员属性进行操作的基础就是上一个修改后的结果。
线程,这个与操作系统与CPU调度有关的东西,很难说出准确通俗的定义,重要还是自己想通,上面所说是自己学习时候理解的,不准确难免,权且交流~~
2013-11-26
概念的话只须要从操作系统和应用程序两者的关系来把握就行了,应用程序是线程的基础,没有了程序还谈何线程呢?但是有应用程序还是不够的,在没有操作系统之前,应用程序的执行过程为并没有线程这一概念的,这是因为线程是操作系统管理应用程序而产生的概念,例如为应用程序分配线程id,协调程序争夺资源,什么唤醒,睡眠等等这些行为都是操作系统为了管理应用程序而产生的.
应用程序和操作系统是线程的物质基础,是程序发展的必然结果,为什么是必然的,因为程序多了,就需要协调资源的分配,线程就是为了解决这个问题而产生的手段,没有了这个手段就没有今天的软件的发展,你说是不是必然?
细节的话可以参考楼上的就可以了.
2013-11-08