• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

Recommended Posts

1.1 JUC简介

在Java中,线程部分是一个关键点,本文提到的JUC也是关于线程的。JUC是java.util.concurrent toolkit的缩写。这是一个处理线程的工具包,JDK1.5开始出现。

1.2 进程与线程

它是程序在进程(Process )计算机数据集上的运行活动,是系统中资源分配和调度的基本单位,是操作系统结构的基础。在当代面向线程的计算机体系结构中,进程是线程的容器。它是程序指令、数据及其组织形式的描述,进程是程序的实体。

它是线程(thread )操作系统可以执行操作调度的最小单位。它包含在流程中,是流程中的实际操作单元。线程是指流程中控制流的单个序列。多个线程可以在一个进程中并发,每个线程并行执行不同的任务。

总结来说:

进程:指的是系统中运行的应用程序;程序一旦运行,就是一个过程;资源分配的最小单位。

Thread :系统分配处理器时间资源的基本单元,或在一个进程内独立执行的单元执行流。线程——程序执行的最小单位。

1.3线程的状态

1.3.1线程状态枚举类

Thread.State

/**

*线程状态。线程可以处于下列状态之一:

* ul

*李{@link #NEW}br

*尚未启动的线程处于这种状态。

*尚未启动的线程处于这种状态。

*/李

* li{@link #RUNNABLE}br

*在Java虚拟机中执行的线程处于这种状态。

*在Java虚拟机中执行的线程处于这种状态。

*/李

* li{@link #BLOCKED}br

*等待监视器锁而被阻塞的线程处于这种状态。

*被阻止等待监视器锁定的线程处于这种状态。

*/李

*李{@link #WAITING}br

*一个线程无限期地等待另一个线程

*执行一个特定的动作就是在这种状态下。

*无限期等待另一个线程执行特定操作的线程处于这种状态。

*/李

* li{@link #TIMED_WAITING}br

*正在等待另一个线程执行操作的线程

*在指定的等待时间内处于这种状态。

*等待另一个线程执行操作的线程在指定的等待时间内一直处于这种状态。

*/李

* li{@link #TERMINATED}br

*已经退出的线程处于这种状态。

*退出的线程处于这种状态。

*/李

* /ul

*

* p

*在给定时间点,一个线程只能处于一种状态。

*这些状态是虚拟机状态,不反映

*任何操作系统线程状态。

*

* @从1.5开始

* @参见#getState

*/

公共枚举状态{

/**

* threa的线程状态

d which has not yet started. */ NEW,//新建 /** * Thread state for a runnable thread. A thread in the runnable * state is executing in the Java virtual machine but it may * be waiting for other resources from the operating system * such as processor. */ RUNNABLE,//准备就绪 /** * Thread state for a thread blocked waiting for a monitor lock. * A thread in the blocked state is waiting for a monitor lock * to enter a synchronized block/method or * reenter a synchronized block/method after calling * {@link Object#wait() Object.wait}. */ BLOCKED,//阻塞 /** * Thread state for a waiting thread. * A thread is in the waiting state due to calling one of the * following methods: * <ul> * <li>{@link Object#wait() Object.wait} with no timeout</li> * <li>{@link #join() Thread.join} with no timeout</li> * <li>{@link LockSupport#park() LockSupport.park}</li> * </ul> * * <p>A thread in the waiting state is waiting for another thread to * perform a particular action. * * For example, a thread that has called <tt>Object.wait()</tt> * on an object is waiting for another thread to call * <tt>Object.notify()</tt> or <tt>Object.notifyAll()</tt> on * that object. A thread that has called <tt>Thread.join()</tt> * is waiting for a specified thread to terminate. */ WAITING,//不见不散 /** * Thread state for a waiting thread with a specified waiting time. * A thread is in the timed waiting state due to calling one of * the following methods with a specified positive waiting time: * <ul> * <li>{@link #sleep Thread.sleep}</li> * <li>{@link Object#wait(long) Object.wait} with timeout</li> * <li>{@link #join(long) Thread.join} with timeout</li> * <li>{@link LockSupport#parkNanos LockSupport.parkNanos}</li> * <li>{@link LockSupport#parkUntil LockSupport.parkUntil}</li> * </ul> */ TIMED_WAITING,//过时不候 /** * Thread state for a terminated thread. * The thread has completed execution. */ TERMINATED;//终结 }

 

1.3.2 wait/sleep的区别。

(1 ) sleep 是 Thread 的静态方法, wait 是 Object 的方法,任何对象实例都能调用。
( 2 ) sleep 不会释放锁,它也不需要占用锁。wait 会释放锁,但调用它的前提是当前线程占有锁(即代码要在synchronized中)。
(3)它们都可以被 interrupted 方法中断。

 

 

1.4并发与并行

1.4.1 串行模式

串行表示所有任务都一一按先后顺序进行。 串行意味着必须先装完一车柴才能运送这车柴,只有运送到了,才能卸下这车柴,并且只有完成了这整个三个步骤,才能进行下一个步骤。

串行是一次只能取得一个任务, 并执行这个任务。


1.4.2 并行模式

并行意味着可以同时取得多个任务,并同时去执行所取得的这些任务。并行模式相当于将长长的一条队列,划分成了多条短队列,所以并行缩短了任务队列的长度。并行的效率从代码层次上强依赖于多进程/多线程代码, 从硬件角度上则依赖于多核CPU。

 

1.4.3 并发

并发(concurrent)指的是多个程序可以同时运行的现象,更细化的是多进程可以同时运行或者多指令可以同时运行。但这不是重点,在描述并发的时候也不会去扣这种字眼是否精确, ==并发的重点在于它是一种现象==, ==并发描述的是多进程同时运行的现象==。但实际上,对于单核心CPU来说,同一时刻只能运行一个线程。所以,这里的"同时运行"表示的不是真的同一时刻有多个线程运行的现象,这是并行的概念,而是提供一种功能让用户看来多个程序同时运行起来了,但实际上这些程序中的进程不是一直霸占CPU的,而是执行一会停一会。

要解决大并发问题,通常是将大任务分解成多个小任务,由于操作系统对进程的调度是随机的,所以切分成多个小任务后,可能会从任一小任务处执行。 这可能会出现一些现象:
● 可能出现一个小任务执行了多次,还没开始下个任务的情况。这时一般会采用队列或类似的数据结构来存放各个小任务的成果
● 可能出现还没准备好第一步就执行第二步的可能。这时,一般采用多路复用或异步的方式,比如只有准备好产生了事件通知才执行某个任务。

● 可以多进程/多线程的方式并行执行这些小任务。也可以单进程/单线程执行这些小任务,这时很可能要配合多路复用才能达到较高的效率

 

1.4.4小结(重点)。

并发:同一时刻多个线程在访问同一个资源,多个线程对一个点
例子:春运抢票 电商秒杀...
并行:多项工作一起执行,之后再汇总。
例子:泡方便面, 电水壶烧水, 一边撕调料倒入桶中。

 

 

1.4.5 管程

0gmwtkztc524259.png

 

 

 

1.4.6 用户线程与守护线程

yxscvfh2k5m4260.png

 

情况一:

wdkquxkkj004261.png

 

情况二:

421l2lfbbpf4262.png

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now