多线程之基本知识

  1. 进程与线程

        进程是具备必定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.多线程

        线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程本身基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),可是它可与同属一个进程的其余的线程共享进程所拥有的所有资源.异步

    2.多线程是异步的,线程被调用的时机是随机的。一个进程运行时至少有一个线程在运行。执行start方法的顺序不表明线程启动的顺序。spa

    3.在建立新线程时继承 Thread 类最大的局限是单继承。线程

    4.自定义线程中的实例变量针对其余线程有共享与不共享之分。对象

    5.synchronized 能够在任意对象及方法上加锁,而加锁的代码称为"互斥区"或"临界区"。继承

    6.当一个线程想要执行同步方法里面的代码时,线程首先尝试去拿这把锁,若是能拿到这把锁,那么线程就能够执行synchronized里的代码了。若是拿不到,那么这个线程就会不断的尝试拿这把锁,直到拿到为止,并且是多个线程同时去抢这把锁。进程

    7.currentThread()能够返回代码正在被哪一个 线程调用。资源

    8.isAlive()是判断当前的线程是否处于活动状态。活动状态:就是线程已经启动且还没有终止。get

    9.sleep()的做用是指定的毫秒数让当前"正在执行的线程"休眠(暂停执行)。当前正在执行的线程是值Thread.currentThread获取的。同步

    10.getId()方法的做用是获取线程的惟一标识.

    11.Thread.interrupted():判断当前线程是不是中止状态。具备清除状态的功能。

    12. xxx.isInterrupted():判断线程对象是否已是中断状态,但不清除状态标识。

    13.线程的中止方法:

        1.异常法:在须要中止线程的地方抛出异常便可终止该线程。

        2.在线程sleep() 状态下中止线程。

        3.使用stop()方法(已被废弃)。

    14.暂停线程:suspend()方法暂停线程,resume()方法恢复线程。

        suspend()和resume()的缺点:极容易形成公共的同步对象形成独占,使其余的线程没法访问公共同步对象。在使用suspend()和resume()时也容易出现线程暂停而致使数据不一样步的状况。

    15.yield()方法:放弃当前的CPU资源,将它让给其余的任务去占用CPU执行时间。当放弃的时间不肯定。

    16.线程的优先级:CPU优先执行优先级较高的线程对象中的任务。线程优先级有助于帮"线程规划器"肯定下次选择哪个线程来优先执行。

    经过setPriority()方法来设置线程的优先级别。

    MIN_PRIORITY = 1;NORM_PRIORITY = 5;MAX_PRIORITY = 10;

    线程的优先级具备继承性,好比A线程启动了B线程,则B线程的优先级与A线程时同样的。

    优先级具备规则性,优先级具备随机性。

    17.线程分为2种,一种是用户线程,一种是守护线程。当进程中不存在非守护线程了,则守护线程自动销毁。典型的守护线程就是垃圾回收线程。

相关文章
相关标签/搜索