void start() | ①使此线程开始执行 ②Java虚拟机调用此线程的run方法。 |
---|---|
void run() | 如果这个线程使用单独的Runnable运行对象构造,则调用该Runnable对象的run方法;否则,此方法不执行任何操作并返回。 |
static Thread currentThread() | 返回对当前正在执行的线程对象的引用。 |
String getName() | 返回此线程的名称。 |
void setName(String name) | 将此线程的名称更改为等于参数 name 。 |
Thread(String name) | 分配一个新的 Thread对象。 |
static void yield() | 对调度程序的一个暗示,即当前线程愿意放弃处理器的使用权。 |
void join() | 等待调用这个方法的线程执行结束才继续当前线程。 即”插队” |
static void sleep(long millis) | 使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行),具体取决于系统定时器和调度程序的精度和准确性。 需要处理异常 |
boolean isAlive() | 测试这个线程是否活着。 |
int getPriority() | 返回此线程的优先级。 |
void setPriority(int newPriority) | 更改此线程的优先级。 |
package vip.zdkk.java;
/**
* @author: zdkk
* @create 2022-05-11 21:32
*
* 测试Thread类方法
* 1. start(): 启动当前线程,调用此线程的run()方法
* 2. run(): 通过重写Thread中run(),将线程要执行的操作声明在此方法中
* 3. currentThread(): 静态方法,返回调用当前方法的线程
* 4. getName(): 获取当前线程的名字
* 5. setName(): 设置当前线程的名字
* 6. Thread(String name): 创建线程对象并命名
* 7. yield(): 释放当前CPU的执行权
* 8. join(): 在线程A中调用线程B的join(),此时线程A进行阻塞状态,直至线程B完全执行完后线程A才结束阻塞状态
* 9. stop(): 已过时,执行时强制结束当前线程
* 10. sleep(long millis): 静态方法,强制让当前线程等待(睡眠)指定时间
* 11. isAlive(): 判断当前线程是否还存存活
* 12. getPriority(): 获取当前线程的优先级
* 13. setPriority(): 设置线程的优先级,高优先级的线程要抢占低优先级线程的执行权,但高优先级只是高概率被先执行,不是一定会被先执行
*
*
* 线程优先级
* MIN_PRIORITY = 1
* NORM_PRIORITY = 5
* MAX_PRIORITY = 10
*/
public class ThreadMethodTest {
public static void main(String[] args) {
HelloThread h1 = new HelloThread();
h1.setName("线程1");
h1.setPriority(Thread.MIN_PRIORITY);
h1.start();
HelloThread h2 = new HelloThread("线程2");
h2.setPriority(Thread.MAX_PRIORITY);
h2.start();
Thread.currentThread().setName("主线程");
System.out.println(Thread.currentThread().getName());
for (int i = 0; i < 100; i++) {
if ((i % 2) == 0) {
System.out.println(Thread.currentThread().getName() + " " + Thread.currentThread().getPriority() + " " + i);
}
if (i == 20) {
try {
h2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
System.out.println(h2.isAlive());
}
}
class HelloThread extends Thread {
public HelloThread(){}
public HelloThread(String name) {
super(name);
}
@Override
public void run() {
// setName("线程1");
for (int i = 0; i < 100; i++) {
if ((i % 2) == 0) {
try {
sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " " + getPriority() + " " + i);
}
if ((i % 20) == 0) {
yield();
}
}
}
}