Java 多线程

来源:互联网 发布:象棋软件开局库 编辑:程序博客网 时间:2024/06/07 01:10
什么是线程?

线程是一个进程中的执行场景。一个进程可以启动多个线程。

进程和进程之间的内存是独立的。

一个进程中的线程共享其进程中的内存和资源,共享的内存是堆内存和方法区内存,栈内存不共享,每个线程有自己的。


线程的调度与控制
通常我们的计算机只有一个CPU,CPU在某一个时刻只能执行一条指令,线程只有得到 CPU时间片,也就是使用权,才可以执行指令。在单 CPU的机器上线程不是并行运行的,只有在多个CPU上线程才可以并行运行。 Java虚拟机要负责线程的调度,取得CPU的使用权,目前有两种调度模型:分时调度模型和抢占式调度模型, Java使用抢占式调度模型。
分时调度模型:所有线程轮流使用CPU的使用权,平均分配每个线程占用 CPU的时间片。
抢占式调度模型:优先让优先级高的线程使用CPU,如果线程的优先级相同,那么会随机选择一个, 优先级高的线程获取的CPU时间片相对多一些。


线程优先级
线程优先级主要分三种: MAX_PRIORITY(最高级 ),MIN_PRIORITY(最低级),NORM_PRIORITY(标准)默认


线程状态
线程状态分七种: born(新生状态 ),runnable(就绪状态),running(运行状态),waiting(等待状态),sleeping(睡眠状态),blocked(阻塞状态),dead(死亡状态)。线程状态和状态之间的转换如下图:



线程同步,锁机制

如果有线程t1和t2,t1和t2同时运行,两个线程间谁也不等谁,这是异步编程模型。

如果有线程t1和t2,t1和t2线程运行,当t1线程必须等t2线程执行完成之后,t1线程才能执行,这是同步编程模型。

什么时候要同步呢?为什么要引入线程同步?

1、为了数据安全,尽管应用程序的效率降低,但为了保证数据安全,必须加入线程同步机制。线程同步机制是程序变成了(等同)单线程。

2、什么条件下要使用线程同步:

      第一、必须是多线程环境。

      第二、多线程环境共享一个数据。

      第三、共享的数据涉及到修改操作。



线程优先级
线程优先级主要分三种: MAX_PRIORITY(最高级 ),MIN_PRIORITY(最低级),NORM_PRIORITY(标准)默认
原创粉丝点击