线程命名和取得

如果想要进行线程名称的操作,可以使用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. 使用Go复刻skiplist核心功能

    0.引言 正好做LC每日一题要求实现一个跳表,于是学习了redis的扩展skiplist,并使用Go进行复刻学习.学习参考了文章:Redis内部数据结构详解(6)--skiplist - 铁蕾的个人博 ...

  2. Linux Centos7 下使用yum安装redis

    更改yum源 由于CentOS官方yum源里面没有Redis,这里我们需要安装一个第三方的yum源,这里用了Fedora的epel仓库: yum install epel-release 安装redi ...

  3. 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!

    引子:那个让运维集体加班的夜晚 "凡哥!线上服务响应时间飙到10秒了!"凌晨1点,实习生小李的语音带着哭腔. 监控大屏上,JVM堆内存曲线像坐了火箭--刚扩容的16G内存,30分钟 ...

  4. JavaGUI - [03] LayoutManager布局管理器

      Component中有一个方法setBounds()可以设置当前容器的位置和大小,但如果我们手动为组件设置位置和大小的话,就会造成程序的不通用性.LayoutManager布局管理器可以根据运行平 ...

  5. 初探本地DeepSeek VL + Typescript + FFMPEG:提取视频关键帧分析内容

    初探本地DeepSeek VL + Typescript + FFMPEG:提取视频关键帧分析内容 前言 随着人工智能和计算机视觉技术的发展,利用图像识别来分析视频内容已经成为现实.本文的主要目标是: ...

  6. 题解:洛谷P11557 [ROIR 2016 Day 2] 有趣数字

    题目传送门. 考虑数位 dp,也就是记忆化搜索,设置一个搜索函数 \(dfs\),有三个参数,一个是当前位数,表示搜到哪一位了,一个是从第一位到上一个位数是否全部顶上界,从第一位到上一位全部顶上界的意 ...

  7. Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露

    一:背景 1. 讲故事 前面跟大家分享过一篇 C# 调用 C代码引发非托管内存泄露 的文章,这是一个故意引发的正向泄露,这一篇我们从逆向的角度去洞察引发泄露的祸根代码,这东西如果在 windows 上 ...

  8. 【Abaqus】材料行为的非均匀空间分布

    设想一种情况:在有限元分析中,一个区域或者整个网格中,每个单元的材料行为都是单独的.这时在ABAQUS中应该如何设置? 两种办法: 给每个单元创建一个集合,然后一一赋予SECTION. 使用*Dist ...

  9. Qt Qss 设置QPushButton图标和背景

    文章目录 Qt QSS 设置 QPushButton的图标叠加背景 前言 解决方法 background-repeat.background-position 最终样式 Qt QSS 设置 QPush ...

  10. Oracle 对 Json 数据进行增删改

    1.背景: 由于项目要求,需要对大型的 Json 数据入库到DB中(clob 类型),由于内容过长或者 oracle 版本限制,有一些熟知的处理方法是不能使用的. 精确解决问题,可以直接看第四步:[4 ...