Java 线程的常用操作方法
线程命名和取得
如果想要进行线程名称的操作,可以使用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 线程的常用操作方法的更多相关文章
- Java 线程常用操作
继Java线程生命周期继续学习Java线程其他常用操作 线程的常用操作 设置线程名字:setName() 获取线程名称:getName() 线程唯一Id:getId() // 自定义线程名称 Stri ...
- java线程相关基本方法
java线程中常用的基本方法有wait,notify,notifyAll,sleep,join,yield等. 线程的生命周期一共分为五个部分,分别是:新建(New).就绪(Runnable).运行( ...
- 进阶Java编程(2)线程常用操作方法
线程常用操作方法 多线程的主要操作方法都在Thread类中定义的. 1,线程的命名和取得 多线程的运行状态是不确定的,那么在程序的开发之中为了可以获取到一些需要使用到的线程就只能依靠线程的名字来进行操 ...
- 菜鸡的Java笔记 - java 线程常用操作方法
线程常用操作方法 线程的命名操作,线程的休眠,线程的优先级 线程的所有操作方法几乎都在 Thread 类中定义好了 线程的命名和取得 ...
- Java线程池使用和常用参数
多线程问题: 1.java中为什么要使用多线程使用多线程,可以把一些大任务分解成多个小任务来执行,多个小任务之间互不影像,同时进行,这样,充分利用了cpu资源. 2.java中简单的实现多线程的方式 ...
- java线程池与五种常用线程池策略使用与解析
背景:面试中会要求对5中线程池作分析.所以要熟知线程池的运行细节,如CachedThreadPool会引发oom吗? java线程池与五种常用线程池策略使用与解析 可选择的阻塞队列BlockingQu ...
- 工作常用4种Java线程锁的特点,性能比较、使用场景
多线程的缘由 在出现了进程之后,操作系统的性能得到了大大的提升.虽然进程的出现解决了操作系统的并发问题,但是人们仍然不满足,人们逐渐对实时性有了要求. 使用多线程的理由之一是和进程相比,它是一种非常花 ...
- java线程池和五种常用线程池的策略使用与解析
java线程池和五种常用线程池策略使用与解析 一.线程池 关于为什么要使用线程池久不赘述了,首先看一下java中作为线程池Executor底层实现类的ThredPoolExecutor的构造函数 pu ...
- Java 线程与多线程
Java是一门支持多线程的编程语言! 什么是进程? 计算机中内存.处理器.IO等资源操作都要为进程进行服务. 一个进程上可以创建多个线程,线程比进程更快的处理单元,而且所占用的资源也小,多线程的应用也 ...
- 【转载】深度解读 java 线程池设计思想及源码实现
总览 开篇来一些废话.下图是 java 线程池几个相关类的继承结构: 先简单说说这个继承结构,Executor 位于最顶层,也是最简单的,就一个 execute(Runnable runnable) ...
随机推荐
- Java SPI机制及实现
一.简介 SPI 的全称为 (Service Provider Interface),是 JDK 内置的一种服务提供发现机制.主要由工具类 java.util.ServiceLoader 提供相应的支 ...
- Luogu P3059 Concurrently Balanced Strings G 题解 [ 紫 ] [ 线性 dp ] [ 哈希 ] [ 括号序列 ]
模拟赛搬的题,dp 思路很明显,但难点就在于找到要转移的点在哪. 暴力 首先我们可以先考虑 \(k=1\) 的情况,这应该很好想,就是对于每一个右括号,找到其匹配的左括号,然后进行转移即可,这个过程可 ...
- 流程控制之switch选择结构
实现方式:switch case语句 switch case语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支 switch语句中的变量类型可以是: byte.short.int或者cha ...
- 记录一次WPF程序进程挂起问题
## 1. 使用背景 开发`WPF`单进程项目,在项目中使用`MongoDB`数据库,需要连接多个不同的数据库实例,另外项目框架采用了事件聚合器来管理模块间的通知调用,基于`NetMQ`实现了一个`Z ...
- IPMITool 工具使用详细教程
IPMITool 工具使用详细教程 一.IPMI 与 IPMITool 简介 1. IPMI 概述 智能平台管理接口(Intelligent Platform Management Interface ...
- Deepseek学习随笔(11)--- 普通人如何抓住DeepSeek红利(附网盘链接)
一.文档简介 这个文档是清华大学新闻与传播学院新媒体研究中心发布的<普通人如何抓住DeepSeek红利>,该文件详细介绍了DeepSeek的功能.应用场景.使用技巧以及如何通过提示词驱动提 ...
- 大数据之路Week10_day04 (Hbase的二级索引,二级索引的本质就是建立各列值与行键之间的映射关系)
二级索引的本质就是建立各列值与行键之间的映射关系 HBASE是在hadoop之上构建非关系型,面向列存储的开源分布式结构化数据存储系统. Hbase的局限性: HBase本身只提供基于行键和全表扫描的 ...
- VMware虚拟机上安装CentOS8详细教程
1.准备工作 1.1.需要准备好已安装完成的VMware虚拟机,如果您的电脑未安装VMware虚拟机,请参考以下连接:https://www.cnblogs.com/x1234567890/p/148 ...
- 注解@Resource与@Autowired的区别
@Resource @Resource有两个常用属性name.type,所以分4种情况 指定name和type:通过name找到唯一的bean,找不到抛出异常:如果type和字段类型不一致,也会抛出异 ...
- php站点导入大mysql文件(linux系统)
问题描述:站点数据多,mysql导出后大于1G,使用phpmyadmin,导入一半报错,白白浪费等待时间,使用navicat 导入,执行时间过长提示错误 解决思路:1.拆分mysql文件,分批次导入, ...