多线程的概念与相关方法

来源:互联网 发布:米聊聊天软件弊端 编辑:程序博客网 时间:2024/06/07 19:13

1.几个概念:

      多线程:有几个执行体,按不同的执行线索同事工作的情况

      守护线程:Java虚拟机本身的线程,如进行垃圾收集工作、响应键盘、鼠标事件等等。

      程序:静态的代码,应用程序的蓝本。

      多任务:在OS中,同时进行几个相同或不同的应用程序,每个程序占用一个进程。

      进程:(1)对应的代码的相关术语:加载、执行、执行完毕;(2)进程本身的相关术语:产生、发展、消亡。

      线程调度管理器:监控线程中启动后进入就绪状态的所有线程,并负责管理线程排队、CPU在线程间的分配。

      线程管理器:即线程调度算法。

      管程:每个被同步资源都对应一个。synchronized标志被同步的资源,系统运行时会分配给它一个管程。

      线程同步(主要思想):避免多个线程对同一资源的访问,这个资源既可以是一个对象,也可以是一个方法或代码。

2.注意:

     线程是程序内部的控制流。它必须在一个程序中运行,其本身不能单独运行。线程是抢占式的,但不一定是分时的。

     同一段代码程序可被多次加载到系统的不同内存空间分别执行,形成不同进程。每个进程都有一个专有的内存空间。

     线程的优先级可以进行设置,优先级分三类:MAX_PRIORITY(10) //最高优先级;MIN_PRIORITY(1) //最

优先级;NORM_PRIORITY(5) //默认优先级。主线程具有默认优先级。

3.不同状态之间的转换,如下图所示:   

        可见,会有几种情况都可以使线程从运行态转到阻塞态。

4.涉及到的一些方法

    wait():放弃当前对资源的占有权,一直到有通知到才运行后面的代码。

    notify():当前线程已放弃对资源的占有,通知等待的线程来获得对资源的占有权,但是只有一个线程能从wait中恢

复,然后继续运行wait后面的语句。

    notifyAll():通知所有的等待线程从wait()方法后的语句开始执行。

    suspend():会导致死锁(resume()方法被调用才能解除)。

    yield():只会给具有相同优先级的线程一个运行的机会。

    join():用于阻止当前线程而运行别的线程,和isAlive()配合使用。

    sleep():给较低优先级的线程一个运行的机会。

    isAlive():测试线程的状态,即是否活着。如:有线程th1、th2,th2为当前正运行的线程,调用join()时,停止

th2,直到th1执行完毕又执行th2。调用th2.isAlive(),返回true,则th2还活着,即已启动,但未结束;返回false,则

说明th2已经dead,即终止了。

原创粉丝点击