标签:native als lse 阻塞 启动 一个 nts 重要 进入
声明本文使用的是JDK1.8
实现多线程从本质上都是由Thread类来进行操作的~我们来看看Thread类一些重要的知识点。Thread这个类很大,不可能整个把它看下来,只能看一些常见的、重要的方法。
1.1设置线程名
我们在使用多线程的时候,想要查看线程名是很简单的,调用Thread.currentThread().getName()即可。
如果没有做什么的设置,我们会发现线程的名字是这样子的:主线程叫做main,其他线程是Thread-x
线程中nextThreadNum()方法实现为我们线程命名,如果我们想要为线程起个名字,那也是很简单的。Thread给我们提供了构造方法!
public class MyThread implements Runnable { @Override public void run() { // 打印出当前线程的名字 System.out.println(Thread.currentThread().getName()); } } public class MyThreadDemo { public static void main(String[] args) { MyThread myThread = new MyThread(); //带参构造方法给线程起名字 Thread thread1 = new Thread(myThread, "harpoonJava"); Thread thread2 = new Thread(myThread, "harpoon"); thread1.start(); thread2.start(); // 打印当前线程的名字 System.out.println(Thread.currentThread().getName()); } }
结果:
main harpoonJava harpoon
当然了,我们还可以通过setName(String name)的方法来改掉线程的名字的。
1.2守护线程
守护线程是为其他线程服务的
守护线程有一个特点:
使用线程的时候要注意的地方:
1.3优先级线程
线程优先级高仅仅表示线程获取的CPU时间片的几率高,但这不是一个确定的因素!
线程的优先级是高度依赖于操作系统的,Windows和Linux就有所区别(Linux下优先级可能就被忽略了)~
Java提供的优先级默认是5,最低是1,最高是10。
setPriority0是一个本地(navite)的方法:
private native void setPriority0(int newPriority);
1.4线程生命周期
在上一篇介绍的时候其实也提过了线程的线程有3个基本状态:执行、就绪、阻塞
Thread上很多的方法都是用来切换线程的状态的,这一部分是重点!
1.4.1sleep方法
调用sleep方法会进入计时等待状态,等时间到了,进入的是就绪状态而并非是运行状态!
1.4.2yield方法
调用yield方法会先让别的线程执行,但是不确保真正让出
1.4.3join方法
调用join方法,会等待该线程执行完毕后才执行别的线程~
1.4.3interrupt方法
线程中断在之前的版本有stop方法,但是被设置过时了。现在已经没有强制线程终止的方法了!
由于stop方法可以让一个线程A终止掉另一个线程B
再次说明:调用interrupt()并不是要真正终止掉当前线程,仅仅是设置了一个中断标志。这个中断标志可以给我们用来判断什么时候该干什么活!什么时候中断由我们自己来决定,这样就可以安全地终止线程了!
interrupt方法压根是不会对线程的状态造成影响的,它仅仅设置一个标志位罢了
interrupt线程中断还有另外两个方法(检查该线程是否被中断):
如果阻塞线程调用了interrupt()方法,那么会抛出异常,设置标志位为false,同时该线程会退出阻塞的。
标签:native als lse 阻塞 启动 一个 nts 重要 进入
原文地址:https://www.cnblogs.com/harpoonJava/p/13149701.html