Thread类常用方法
Thread对象调用:
序号 | 方法 | 方法描述 |
---|---|---|
1 | pubic void start() | 使该线程开始执行;Java虚拟机调用该线程的run方法 |
2 | public void run() | 如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。 |
3 | public final void setName(String name) | 改变线程名称,使之与参数 name 相同。 |
4 | public final void setPriority(int priority) | 更改线程的优先级 |
5 | public final void setDaemon(boolean on) | 将该线程标记为守护线程或用户线程。 |
6 | public final void join(long millisec) | 调用线程等待被调用线程完成后,才能继续用下运行。参数为最多等待多少毫秒 |
7 | public void interrupt() | 中断线程 |
8 | public final boolean isAlive() | 测试线程是否处于活动状态。 |
Thread类调用:
序号 | 方法 | 方法描述 |
---|---|---|
1 | public static void yield() | 暂停当前正在执行的线程对象,并执行其他线程。 |
2 | public static boolean holdsLock(Object x) | 当且仅当当前线程在指定的对象上保持监视器锁时,才返回 true。 |
3 | public static void sleep(long millisec) | 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。 |
4 | public staticThread currentThread() | 返回对当前正在执行的线程对象的引用。 |
5 | public static void dumpStack() | 将当前线程的堆栈跟踪打印至标准错误流。 |
示例:
package pers.zhang.thread;
/**
* @author zhang
* @date 2020/1/15 - 0:36
*/
public class GuessANumber extends Thread {
private int number;
public GuessANumber(int number) {
this.number = number;
}
public void run() {
int counter = 0;
int guess = 0;
do {
guess = (int) (Math.random() * 100 + 1);
System.out.println(this.getName() + " guesses " + guess);
counter++;
} while(guess != number);
System.out.println("** Correct!" + this.getName() + "in" + counter + "guesses.**");
}
}
package pers.zhang.thread;
/**
* @author zhang
* @date 2020/1/15 - 0:35
*/
public class DisplayMessage implements Runnable {
private String message;
public DisplayMessage(String message) {
this.message = message;
}
@Override
public void run() {
while(true) {
System.out.println(message);
}
}
}
package pers.zhang.thread;
/**
* @author zhang
* @date 2020/1/15 - 0:37
*/
public class ThreadClassDemo {
public static void main(String [] args) {
Runnable hello = new DisplayMessage("Hello");
Thread thread1 = new Thread(hello);
thread1.setDaemon(true);
thread1.setName("hello");
System.out.println("Starting hello thread...");
thread1.start();
Runnable bye = new DisplayMessage("Goodbye");
Thread thread2 = new Thread(bye);
thread2.setPriority(Thread.MIN_PRIORITY);
thread2.setDaemon(true);
System.out.println("Starting goodbye thread...");
thread2.start();
System.out.println("Starting thread3...");
Thread thread3 = new GuessANumber(27);
thread3.start();
try {
thread3.join();
}catch(InterruptedException e) {
System.out.println("Thread interrupted.");
}
System.out.println("Starting thread4...");
Thread thread4 = new GuessANumber(75);
thread4.start();
System.out.println("main() is ending...");
}
}
输出每次都不同:
Starting hello thread...
Starting goodbye thread...
Hello
Hello
Hello
Hello
Hello
Hello
Goodbye
Goodbye
Goodbye
Goodbye
Goodbye
.......