线程命名和取得

如果想要进行线程名称的操作,可以使用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. FLink09的RichFlatMap和RichMap使用

    一.数据源配置 pom文件:https://www.cnblogs.com/robots2/p/16048648.html 二.RichFlatMap代码,输入单行输出多行 package net.x ...

  2. [CF494D] Birthday 题解

    首先 \(S(u)\) 显然是 \(u\) 的子树. 假如 \(u\) 是定点,问题转化为区间求平方和,十分简单. 于是我们用线段树维护区间平方和,支持区间加,然后离线问题,在 \(u\) 的位置处理 ...

  3. Ubuntu详细的安装和配置ssh教程

    Ubuntu安装和配置ssh的步骤如下: 打开终端,输入以下命令安装ssh: sudo apt-get install openssh-server 安装完成后,启动ssh服务: sudo syste ...

  4. HDP集群部署

    一.环境准备 centos7 安装和系统环境处理 1)运行初始化脚本 !/bin/bash ------------------------------------- 系统环境初始化脚本 本脚本仅支持 ...

  5. C# 图形界面编程之 FlowLayoutPanel 界面闪烁问题解决

    公司需要我写几个GUI程序,让虚拟机(guest)内部可以控制虚拟机(host)外部的硬件. 控制外部的硬件的方法就是开一个串口,这样虚拟机与宿主机就可以相互通讯,此时就可以让虚拟机发送命令,宿主机执 ...

  6. 云服务器Linux 时间与本地时间不一致

      云服务器Linux 时间与本地时间不一致 问题解释: 云服务器和本地计算机之间的时间不一致可能是因为它们使用的时间同步服务不同,或者云服务器没有配置自动对时. 解决方法: 手动同步时间:可以使用d ...

  7. .net core datatable 导出 pdf 支持中文

    1.nuget  安装 iTextSharp (V4.1.6) to .NET Core. 2.code public DataTable ToDataTable<T>(IEnumerab ...

  8. HarmonyOS应用开发者高级认证【考题+答案】

    HarmonyOS应用开发者高级认证 前言 考试简介 掌握鸿蒙的核心概念和端云一体化开发.数据.网络.媒体.并发.分布式.多设备协同等关键技术能力,具备独立设计和开发鸿蒙应用能力. 博文说明 本博文的 ...

  9. 微信小程序云函数

    小程序开发云环境设置 注意事项 每一个云函数都是一个独立的 nodeJS 项目.所以每个云函数下都有 package.json 文件 错误 前端操作数据库 1 指引 2 新建集合 3 新增记录 4 查 ...

  10. goland Cannot resolve import 'google/api/annotations.proto'

    前言 kratos 项目出现 import 标红,但是 $GOPATH/src/google/api/annotations.proto 已经存在了. 解决 路径:Goland > Settin ...