JDK源码(十九):Thread

Posted jdkSpring

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDK源码(十九):Thread相关的知识,希望对你有一定的参考价值。

进程

进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。程序运行时系统就会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列,进程调度器选中它的时候就会为它分配CPU时间,程序开始真正运行。

线程

线程是程序执行时的最小单位,它是进程的一个执行流,是CPU调度和分派的基本单位,一个进程可以由很多个线程组成,线程间共享进程的所有资源,每个线程有自己的堆栈和局部变量。线程由CPU独立调度执行,在多CPU环境下就允许多个线程同时运行。同样多线程也可以实现并发操作,每个请求分配一个线程来处理。
线程是程序中的执行线程。Java虚拟机允许应用程序同时运行多个执行线程。每个线程都有优先级。优先级较高的线程优先于优先级较低的线程执行。每个线程也可以标记为守护进程,也可以不标记为守护进程。当在某个线程中运行的代码创建一个新的<code>线程</code>对象时,新线程的优先级最初设置为等于创建线程的优先级,并且仅当创建线程是守护进程时才是守护进程线程。每个线程都有一个用于标识的名称。多个线程可能具有相同的名称。如果在创建线程时未指定名称,则会为其生成新名称。

类名

publicclass Thread implements Runnable 

变量

线程创建

1.继承Thread类

public class ThreadDemo extends Thread { @Override public void run() { System.out.println("Thread"); }}

2.实现Runnable接口

public class ThreadDemo implements Runnable { @Override public void run() {        System.out.println("Runnable"); }}

3.使用Callable和Future

public class ThreadDemo implements Callable<String> { @Override public String call() throws Exception { System.out.println(Thread.currentThread().getName()); return Thread.currentThread().getName();    } public static void main(String[] args) throws Exception { Callable<String> callable = new ThreadDemo(); FutureTask<String> ft = new FutureTask<>(callable); new Thread(ft,"threadName").start(); System.out.println(ft.get()); }}

线程状态

JDK源码(十九):Thread

start()

JDK源码(十九):Thread

run

JDK源码(十九):Thread

真正启动线程的是start()方法而不是run(),run()和普通的成员方法一样,可以重复使用,但不能启动一个新线程。

sleep()和wait()的区别

sleep为线程的方法,而wait为Object的方法,他们的功能相似,最大本质的区别是:sleep不释放锁,wait释放锁。
sleep(milliseconds)可以用时间指定来使他自动醒过来,如果时间不到你只能调用interreput()来终止线程;wait()可以用notify()/notifyAll()直接唤起。

JDK源码(十九):Thread

当调用sleep方法输出 1001,调用wait方法输出1100。

join

JDK源码(十九):Thread

Join()方法,使调用此方法的线程wait(),直到调用此方法的线程对象所在的线程执行完毕后被唤醒。

interrupt

JDK源码(十九):Thread

当对一个线程,调用 interrupt() 时,
① 如果线程处于被阻塞状态(例如处于sleep, wait, join 等状态),那么线程将立即退出被阻塞状态,并抛出一个InterruptedException异常。仅此而已。
② 如果线程处于正常活动状态,那么会将该线程的中断标志设置为 true,仅此而已。被设置中断标志的线程将继续正常运行,不受影响。

以上是关于JDK源码(十九):Thread的主要内容,如果未能解决你的问题,请参考以下文章

我的jdk源码:Thread类

Hadoop基础(四十九):压缩和存储

死磕JDK源码之Thread

JDK1.8 Thread 源码分析

JDK源码学习-ThreadRunnable与Callable

JDK源码阅读之 HashMap