线程的常用操作方法
Thread 类中提供有设置线程名称以及获得线程名的方法
- 设置线程名称:
- 构造方法:public Thread(Runnable target,String name);
- 设置名称:public final void setName(String name);
- 获取线程名称:
- 获得名称:public final String getName();
- 获取当前线程: public static Thread currentThread();
- 线程休眠: (在进行休眠的时候可能会产生中断异常)
- public static void sleep(longj millis) throws InterruptedException;
- public static void sleep(long millis, int nanos) throws InterruptedException;
- 线程中断:
- 判断线程是否被中断: public boolean isInterrupted();
- 中断线程执行: public void interrupt();
- 线程强制执行:
- public final void join() throws InterruptedException ;
- (要实现线程强制执行必须先获得线程对象)
- 线程礼让:
- public static void yield();
- 线程优先级:
- 设置优先级:public final void setPriority(int newPriority);
- 获取优先级: public final int getPriority();
范例:
package practicePackage;
class mmThread implements Runnable{
@Override
public void run() {
System.out.println("对象名称:" + Thread.currentThread().getName()); // 获取对象名称
try {
Thread.sleep(1000); // 线程休眠
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程休眠结束");
System.out.println("线程是否被中断" + Thread.currentThread().isInterrupted()); // 判断线程是否被中断
Thread.currentThread().interrupt(); // 线程中断
}
}
public class threadDemo {
public static void main(String[] args) {
Thread mt = new Thread(new mmThread(),"线程对象1"); // 设置线程名称
mt.start();
}
}
运行结果:
对象名称:线程对象1
线程休眠结束
线程是否被中断false
Process finished with exit code 0
线程强制执行:
package practicePackage;
public class threadDemo {
public static void main(String[] args) {
Thread mainThread = Thread.currentThread(); // 获取 main 线程
new Thread(()->{
for (int i=0;i<10;i++){
if ( i ==3 ){
try {
mainThread.join(); // 主线程强制执行,占用子线程资源
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("子线程执行.. " + i);
}
},"子线程").start(); // 子线程
for (int x=0;x<10;x++){
System.out.println("主线程执行.. " + x); // 主线程
}
}
}
运行结果:
主线程执行.. 0
子线程执行.. 0
主线程执行.. 1
子线程执行.. 1
主线程执行.. 2
子线程执行.. 2
主线程执行.. 3
主线程执行.. 4
主线程执行.. 5
主线程执行.. 6
主线程执行.. 7
主线程执行.. 8
主线程执行.. 9
子线程执行.. 3
子线程执行.. 4
子线程执行.. 5
子线程执行.. 6
子线程执行.. 7
子线程执行.. 8
子线程执行.. 9
Process finished with exit code 0
线程礼让:
package practicePackage;
public class threadDemo {
public static void main(String[] args) {
Thread mainThread = Thread.currentThread(); // 获取 main 线程
new Thread(()->{
for (int i=0;i<10;i++){
if (i % 2 ==0){
Thread.yield(); // 子线程礼让main线程
System.out.println("******** 子线程礼让了main线程 ********");
}
System.out.println("子线程执行.. " + i);
}
},"子线程").start(); // 子线程
for (int x=0;x<10;x++){
System.out.println("主线程执行.. " + x); // 主线程
}
}
}
运行结果:
******** 子线程礼让了main线程 ********
子线程执行.. 0
子线程执行.. 1
主线程执行.. 0
******** 子线程礼让了main线程 ********
子线程执行.. 2
子线程执行.. 3
******** 子线程礼让了main线程 ********
主线程执行.. 1
子线程执行.. 4
子线程执行.. 5
******** 子线程礼让了main线程 ********
主线程执行.. 2
子线程执行.. 6
主线程执行.. 3
子线程执行.. 7
******** 子线程礼让了main线程 ********
主线程执行.. 4
子线程执行.. 8
主线程执行.. 5
主线程执行.. 6
子线程执行.. 9
主线程执行.. 7
主线程执行.. 8
主线程执行.. 9
Process finished with exit code 0
线程优先级:
package practicePackage;
public class threadDemo {
public static void main(String[] args) {
Thread mainThread = Thread.currentThread(); // 获取 main 线程
new Thread(()->{
Thread.currentThread().setPriority(Thread.MIN_PRIORITY); // 设置子线程优先级最低
for (int i=0;i<10;i++){
System.out.println("子线程执行.. " + i);
}
},"子线程").start(); // 子线程
for (int x=0;x<10;x++){
System.out.println("主线程执行.. " + x); // 主线程
}
}
}
运行结果:
子线程执行.. 0
主线程执行.. 0
主线程执行.. 1
主线程执行.. 2
主线程执行.. 3
主线程执行.. 4
主线程执行.. 5
主线程执行.. 6
主线程执行.. 7
主线程执行.. 8
主线程执行.. 9
子线程执行.. 1
子线程执行.. 2
子线程执行.. 3
子线程执行.. 4
子线程执行.. 5
子线程执行.. 6
子线程执行.. 7
子线程执行.. 8
子线程执行.. 9
Process finished with exit code 0