-
测试Thread类中的常用方法
- 1.start():启动当前线程;调用当前线程的run()
- 2.run():通常需要重写Thread类中的此方法,将创建的线程要执行的操作声明在此方法中
- 3.currentThread():static;返回执行当前代码的线程
- 4.getName():获取当前线程的名字
- 5.setName():设置当前线程的名字
- 6.yield():释放当前CPU的执行权
- 7.join():在线程A中调用B的join(),此时线程A进入阻塞状态,直到线程B完全执行完以后,线程A才结束阻塞状态
- 8.stop():已过时。当执行此方法时强制结束当前线程
- 9.sleep(long milliTime):让当前线程阻塞指定的毫秒数,在指定的milliTime内,当前的线程是阻塞状态
- 10.isAlive():判断当前线程是否存活
-
线程的优先级:
- 1.MAX_PRIORITY:10
- MIN_PRIORITY:1
- NORM_PRIORITY:5 -->默认优先级
-
如何获取和设置当前线程的优先级?
- getPriority():获取线程的优先级
- setPriority(int p):设置线程的优先级
- 说明:高优先级线程要抢占低优先级线程CPU的执行权,但只是从概率上来讲,高优先级的线程高概率被执行,不代表高优先级的线程执行完成后,低优先级的线程才被执行
public class ThreadMethodTest {
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.setName("线程一"); //设置线程名
myThread.start();//启动线程
Thread.currentThread().setName("主线程");//Thread.currentThread():静态方法,获取当前线程
for (int i = 0; i < 100; i++) {
if (i % 2 == 0) {
System.out.println(Thread.currentThread().getName() + ":" + i + "*******");
}
if (i == 20) {
try {
myThread.join();//插入“线程一”,主线程等待该线程结束后再执行
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
class MyThread extends Thread {
@Override
public void run() {
for (int i = 0; i < 100; i++) {
if (i % 2 == 0) {
try {
sleep(1000);//睡眠1000ms
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ":" + i);
}
// if (i % 20 == 0) {
// yield();//让步指令,释放当前CPU的执行权,但实际上CPU依旧有可能继续执行该线程
// }
}
}
}
Java中的线程分为两类:一种是守护线程,一种是用户线程。它们在几乎每个方面都是相同的,唯一的区别是判断JVM何时离开。守护线程是用来服务用户线程的,通过在start()方法前调用thread.setDaemon(true)可以把一个用户线程变成一个守护线程。Java垃圾回收就是一个典型的守护线程。若JVM中都是守护线程,当前JVM将退出。