当前位置: 首页 > news >正文

线程基本方法

1。设置线程名
    继承Thread类的线程,可以直接使用.setName()方法,设置线程名。也可以使用构造方法,需要注意java默认不继承构造方法,所以需要自己调用下父类的构造方法。

public class Demo {public static void main(String[] args) {MyThread myThread1=new MyThread("飞机");myThread1.start();MyThread myThread2=new MyThread();myThread2.setName("火箭");myThread2.start();//当jvm虚拟机启动后,会自动的启动多条线程,其中一条是main主线程//主线程的作用是调用main方法,并执行其中的代码,在以前,我们写的所有代码,其实都是运行在main线程中Thread thread=Thread.currentThread();System.out.println(thread.getName());//获取优先级System.out.println(myThread1.getPriority());//线程的默认优先级都是5,包括main线程}
}
public class MyThread extends Thread {@Overridepublic void run() {for (int i = 0; i < 100; ++i) {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}//在不设置线程名的情况下,线程名默认是Thread+线程序号System.out.println(getName());}}//构造方法子类默认不继承,所以这里需要通过super关键字调用父类Thread的构造方法,给Thread设置名字public MyThread() {}public MyThread(String name) {super(name);}
}

 实现runnable接口的线程,可以使用.setName方法。但是不能使用构造方法,因为他不像上面继承Thread类的线程,他没有父类的构造方法可以调用。

public class Mythread implements Runnable {@Overridepublic void run() {for (int i = 0; i < 100; ++i) {String name = Thread.currentThread().getName();System.out.println("你好世界!"+"----"+name);}}
}
public class Demo {public static void main(String[] args) {Mythread mythread=new Mythread();Thread t1=new Thread(mythread);t1.setName("线程1");Thread t2=new Thread(mythread);t2.setName("线程2");t1.start();t2.start();//获取优先级System.out.println(t1.getPriority());}
}

2. join方法  当前线程需要等待 调用join方法的线程执行完毕,当前线程才能继续执行

public class Demo {public static void main(String[] args) throws InterruptedException {MyThread myThread = new MyThread();myThread.start();// 在默认情况下,当前线程和在当前线程添加的线程会交替执行// 使用了join方法后,当前线程会等待myThread执行完毕,后继续执行本线程myThread.join();for (int i = 0; i < 10; i++) {Thread.sleep(1);//模拟主线程执行耗时System.out.println(Thread.currentThread().getName());}}
}
public class MyThread extends Thread {@Overridepublic void run() {for (int i = 0; i < 100; ++i) {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("自定义线程"+i);}}
}

执行结果:MyThread执行完后,才执行main线程的输出语句

3。

setDaemon

守护线程:当其他非守护线程执行完毕,守护线程不管是否执行完毕,都会停止。

就像舔狗(守护线程)和女神(非守护线程),如果女神走了,那舔狗啥都不管,也走。

主线程

public class Demo {public static void main(String[] args) {NvShenThread nvShenThread=new NvShenThread();TianGouThread tianGouThread =new TianGouThread();//将舔狗线程设置为守护线程 守护线程:当其他非守护线程执行完毕,会自动停止守护线程//应用场景:qq聊天和发送文件,聊天框关闭,发送文件也应当停止tianGouThread.setDaemon(true);nvShenThread.start();tianGouThread.start();}
}

女神线程(非守护线程)

public class NvShenThread extends Thread {@Overridepublic void run() {for (int i = 0; i < 10; i++) {try {Thread.sleep(2);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("女神线程执行"+"----"+i);}}
}

舔狗线程(守护线程)

public class TianGouThread extends Thread {@Overridepublic void run() {for (int i = 0; i < 100; i++) {try {Thread.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("舔狗线程执行"+"----"+i);}}
}

http://www.lryc.cn/news/246167.html

相关文章:

  • Linux操作系统 1.初识Linux
  • 分布式事务-两阶段提交2PC
  • 初识Spring (Spring 核心与设计思想)
  • 智能优化算法应用:基于教与学算法无线传感器网络(WSN)覆盖优化 - 附代码
  • Bitcoin SV 和 Bitcoin Core 之间首次跨链原子交换
  • RT-DETR改进 | 2023 | InnerEIoU、InnerSIoU、InnerWIoU、InnerDIoU等二十余种损失函数
  • JDBC编程基础
  • Linux shell命令
  • Vue 3 面试经验分享
  • Vue简易的车牌输入键盘,可以根据需要修改
  • 十分钟搭建VScode C/C++运行环境
  • 控制台gbk乱码
  • Springboot日志-logback
  • 六、Lua 运算符
  • Android frameworks 开发总结十一
  • 学嵌入式,已经会用stm32做各种小东西了,下一步是什么
  • Java面试题10
  • DBeaver连接MySQL提示“Public Key Retrieval is not allowed“问题解决方式
  • 振弦式轴力计和振弦采集仪组成的安全监测解决方案
  • 卡尔曼滤波
  • 不受平台限制,Sketch 网页版震撼登场
  • 如何使用.pth训练模型
  • C++11线程以及线程同步
  • 深度学习之基于YoloV3杂草识别系统
  • Linux 命令vim(编辑器)
  • 轻松配置PPPoE连接:路由器设置和步骤详解
  • 电源控制系统架构(PCSA)之系统分区电源域
  • Linux:docker基础操作(3)
  • 【Axure教程】用中继器制作卡片多条件搜索效果
  • Linux中vi常用命令-批量替换