线程命名和取得

如果想要进行线程名称的操作,可以使用Thread类的如下方法:

  • 构造方法:public Thread(Runnable target,String name);
  • 设置名字:public final void setName(String name);//final方法不允许覆写
  • 取得名字:public final String getName();

    如果没有为线程设置名字,会自动为线程设置不重复的名字
/**
*
* 2017-10-08
* @author Junwei Zhu
*
*/
class MyThread03 implements Runnable
{ @Override
public void run() {
//取得当前线程的名字
System.out.println(Thread.currentThread().getName());
} }
public class GetNameThread {
public static void main(String[] args) {
MyThread03 mt = new MyThread03();
new Thread(mt).start();
new Thread(mt).start();
new Thread(mt).start();
}
}
Thread-0
Thread-1
Thread-2

自动定义线程名字

/**
*
* 2017-10-08
* @author Junwei Zhu
*
*/
class MyThread03 implements Runnable
{ @Override
public void run() {
//取得当前线程的名字
System.out.println(Thread.currentThread().getName());
} }
public class GetNameThread {
public static void main(String[] args) {
MyThread03 mt = new MyThread03();
new Thread(mt,"自己的线程A").start();
new Thread(mt,"自己的线程B").start();
Thread thread = new Thread(mt);
thread.setName("自己的线程C");
thread.start(); //main()方法可以看成是一个主线程,在主线程下创建的线程可以看成是子线程
mt.run(); }
}
main
自己的线程A
自己的线程B
自己的线程C

提问:每一个JVM进程启动的时候至少启动几个线程?

  • main线程:程序的主要执行,以及启动子线程
  • gc线程:负责垃圾收集

线程的休眠

所谓线程休眠指的就是让线程的执行速度稍微变慢一点。休眠的方法:

public static void sleep(long mills)throws InterruptedException//中断异常
package thread;
/**
* 线程休眠
* 每一次执行到run()方法的线程对象都必须进行休眠,所以执行的速度就会变慢
* 默认情况下,如果设置了多个线程对象,那么所有的线程对象将一起进去到run()方法(所谓一起进入是因为先后顺序太短了)
* 2017-10-09
* @author Junwei Zhu
*/
class MyThread03 implements Runnable
{
@Override
public void run() {
for(int x=0;x<1000;x++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//取得当前线程的名字
System.out.println(Thread.currentThread().getName()+",x="+x);
}
}
}
public class GetNameThread {
public static void main(String[] args) {
MyThread03 mt = new MyThread03();
new Thread(mt,"自己的线程A").start();
new Thread(mt,"自己的线程B").start();
new Thread(mt,"自己的线程c").start();
}
}
自己的线程c,x=0
自己的线程B,x=0
自己的线程A,x=0
自己的线程c,x=1
自己的线程A,x=1
自己的线程B,x=1
自己的线程A,x=2
自己的线程B,x=2
自己的线程c,x=2
自己的线程c,x=3
自己的线程B,x=3
自己的线程A,x=3
自己的线程A,x=4
自己的线程B,x=4
...

线程优先级(priority)

所谓的优先级指的是越高的优先级,越有可能先执行。在Thread类里面提供了两个方法:

  • 设置优先级:public final void setPriority(int newPriority);
  • 取得优先级:public final int getPriority();

设置和取得优先级都是使用int数据类型,对于此内容有三种取值:

  • 最高优先级:public static final int MAX_PRIORITY;
  • 中等优先级:public static final int NORM_PRIORITY;
  • 最低优先级:public static final int M_PRIORITY;
class MyThread implements Runnable
{ @Override
public void run() {
for(int x = 0;x<20;x++) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+",x="+x);
}
}
}
public class PriorityThreadTest {
public static void main(String[] args) {
MyThread mt = new MyThread();
Thread t1 = new Thread(mt,"自己的线程A");
Thread t2 = new Thread(mt,"自己的线程B");
Thread t3 = new Thread(mt,"自己的线程C");
t1.setPriority(Thread.MAX_PRIORITY);
t1.start();
t2.start();
t3.start();
}
}
自己的线程A,x=0
自己的线程B,x=0
自己的线程C,x=0
自己的线程A,x=1
自己的线程C,x=1
自己的线程B,x=1
自己的线程A,x=2
自己的线程C,x=2
自己的线程B,x=2
自己的线程A,x=3
自己的线程C,x=3
自己的线程B,x=3
自己的线程A,x=4
自己的线程C,x=4
自己的线程B,x=4
自己的线程A,x=5
自己的线程C,x=5
自己的线程B,x=5
自己的线程A,x=6
自己的线程C,x=6
自己的线程B,x=6
自己的线程A,x=7
自己的线程C,x=7
自己的线程B,x=7
...

可以看到基本上都是A线程先执行。

Java 线程的常用操作方法的更多相关文章

  1. Java 线程常用操作

    继Java线程生命周期继续学习Java线程其他常用操作 线程的常用操作 设置线程名字:setName() 获取线程名称:getName() 线程唯一Id:getId() // 自定义线程名称 Stri ...

  2. java线程相关基本方法

    java线程中常用的基本方法有wait,notify,notifyAll,sleep,join,yield等. 线程的生命周期一共分为五个部分,分别是:新建(New).就绪(Runnable).运行( ...

  3. 进阶Java编程(2)线程常用操作方法

    线程常用操作方法 多线程的主要操作方法都在Thread类中定义的. 1,线程的命名和取得 多线程的运行状态是不确定的,那么在程序的开发之中为了可以获取到一些需要使用到的线程就只能依靠线程的名字来进行操 ...

  4. 菜鸡的Java笔记 - java 线程常用操作方法

    线程常用操作方法        线程的命名操作,线程的休眠,线程的优先级            线程的所有操作方法几乎都在 Thread 类中定义好了            线程的命名和取得      ...

  5. Java线程池使用和常用参数

    多线程问题: 1.java中为什么要使用多线程使用多线程,可以把一些大任务分解成多个小任务来执行,多个小任务之间互不影像,同时进行,这样,充分利用了cpu资源. 2.java中简单的实现多线程的方式 ...

  6. java线程池与五种常用线程池策略使用与解析

    背景:面试中会要求对5中线程池作分析.所以要熟知线程池的运行细节,如CachedThreadPool会引发oom吗? java线程池与五种常用线程池策略使用与解析 可选择的阻塞队列BlockingQu ...

  7. 工作常用4种Java线程锁的特点,性能比较、使用场景

    多线程的缘由 在出现了进程之后,操作系统的性能得到了大大的提升.虽然进程的出现解决了操作系统的并发问题,但是人们仍然不满足,人们逐渐对实时性有了要求. 使用多线程的理由之一是和进程相比,它是一种非常花 ...

  8. java线程池和五种常用线程池的策略使用与解析

    java线程池和五种常用线程池策略使用与解析 一.线程池 关于为什么要使用线程池久不赘述了,首先看一下java中作为线程池Executor底层实现类的ThredPoolExecutor的构造函数 pu ...

  9. Java 线程与多线程

    Java是一门支持多线程的编程语言! 什么是进程? 计算机中内存.处理器.IO等资源操作都要为进程进行服务. 一个进程上可以创建多个线程,线程比进程更快的处理单元,而且所占用的资源也小,多线程的应用也 ...

  10. 【转载】深度解读 java 线程池设计思想及源码实现

    总览 开篇来一些废话.下图是 java 线程池几个相关类的继承结构: 先简单说说这个继承结构,Executor 位于最顶层,也是最简单的,就一个 execute(Runnable runnable) ...

随机推荐

  1. nacos(三): 创建第一个生产者producer(单体)

    因为springcloud各个版本之间适配非常神经质,所以事件明确,在本实验环节中:使用的是JDK8,选择的springboot版本是2.7.6. 可以借助阿里云的脚手架(点此进入)帮我们创建第一个s ...

  2. Monaco Editor 中使用在线版 Copilot

    我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值. 本文作者:文长 引言 现代软件开发中,代码编辑器的功能不断演进,以满 ...

  3. RabbitMQ(六)——路由模式

    RabbitMQ系列 RabbitMQ(一)--简介 RabbitMQ(二)--模式类型 RabbitMQ(三)--简单模式 RabbitMQ(四)--工作队列模式 RabbitMQ(五)--发布订阅 ...

  4. 2025 年最值得尝试的几款 DevOps 平台工具推荐

    随着软件开发和运维的深度融合,DevOps 平台已成为现代企业加速数字化转型的核心引擎.在 2025 年,面对快速迭代的市场需求与复杂的技术架构,选择一款适配性强.功能完备的 DevOps 平台,不仅 ...

  5. 【FAQ】HarmonyOS SDK 闭源开放能力 —Map Kit(5)

    1.问题描述: 提供两套标准方案,可根据体验需求选择: 1.地图Picker(地点详情) 用户体验:①展示地图 ②标记地点 ③用户选择已安装地图应用 接入文档:https://developer.hu ...

  6. 无人机 offboard 控制

    博客地址:https://www.cnblogs.com/zylyehuo/ 参考 https://space.bilibili.com/393165606/channel/collectiondet ...

  7. 使用 bc4 解决 git 合并冲突问题

    博客地址:https://www.cnblogs.com/zylyehuo/ STEP1:安装 beyond compare 安装地址: https://www.scootersoftware.com ...

  8. Audio DSP 链接脚本文件解析

    上篇文章(智能手表音乐播放功耗的优化)讲了怎么优化音乐场景下的功耗,其中第二点是优化memory的布局.那么在哪里优化memory的布局呢?就是在本文要讲的链接脚本(ld)文件里.作为audio DS ...

  9. DRAM的读写操作、刷新、恢复的原理

    这一节湖科大教书匠讲得特别好,原理梳理的很清晰,建议去b站看一看 写这个只为了自己复习方便一点 对读操作会破坏数据的理解 预充电利用列线上的寄生电容,使得每列的电压保持在\(Vcc/2\) 进行读操作 ...

  10. 【跟K8S学设计】Informer全分析-Reflector(上)

    鉴于Informer架构及其处理逻辑蕴含了丰富的实战技术,本文将分为上下两章进行深入探讨. 上篇将专注于解析Informer中的Reflector组件,而下篇则会详尽分析Indexer模块.通过这种结 ...