线程常用操作方法
        线程的命名操作,线程的休眠,线程的优先级
    
        线程的所有操作方法几乎都在 Thread 类中定义好了
        
    线程的命名和取得
        从本质上来讲多线程的运行状态并不是固定的。所以来讲爱那个要想确定线程的执行,唯一的区别就在于线程的名称上
        在起名的时候就应该尽可能的避免重名,或者避免修改名称
        在 Thread 类中提供有如下的方法可以实现线程名称的操作:
            构造方法: public Thread(Runnable target, String name)
            设置名字: public final void setName(String name)
            取得名字: public final String getName()
            
        既然线程的执行本身是不确定的状态,所以如果要取得线程名字的话,那么唯一能做的就是取得当前的线程名字
        所以在 Thread 类里面提供有这样的方法: public static Thread currentThread()
        
        范例:线程的命名和取得

package cn.mysterious.study3;

class MyThread implements  Runnable{

    @Override
public void run() {
// TODO Auto-generated method stub
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + ",i = " + i);
}
} } public class StudyThread { public static void main(String[] args) throws Exception {
MyThread mt = new MyThread();
new Thread(mt,"线程A").start();
new Thread(mt).start();
new Thread(mt).start();
} }

如果在设置线程对象是没有设置具体的名字,那么就采用一个默认的名字进行定义
            
        范例:观察代码

package cn.mysterious.study3;

class MyThread implements  Runnable{

    @Override
public void run() {
System.out.println("MyThread 线程类:" + Thread.currentThread().getName());
} } public class StudyThread { public static void main(String[] args) throws Exception {
MyThread mt = new MyThread();
new Thread(mt).start(); // 线程启动调用 run() 方法
mt.run(); // 直接通过对象调用 run() 方法
} }
/*
结果:
MyThread 线程类:main
MyThread 线程类:Thread-0
*/

MyThread 线程类:main ( mt.run(); )
            MyThread 线程类:Thread-0 (new Thread(mt).start();)
            
        线程一定是依附在进程存在的,但是现在的进程在哪里呢?
            每当使用java命令在JVM上解释某一个程序执行的时候,那么都会默认的启动一个JVM的进程,而主方法只是这进程中的一个线程,所以整个程序一直都跑在线程的运行机制上
            
            每个JVM至少会启动两个线程:主线程,GC线程
            
    线程的休眠
        如果要想让某些线程延缓执行,俺么就可以使用休眠的方式来进行处理
        在 Thread 类里面提供有如下的休眠操作:
            休眠方法: public static void sleep(long millis,int nanos)throws InterruptedException
            如果休眠的时间没到就停止休眠了,那么就会产生中断异常
        范例:观察休眠

package cn.mysterious.study3;

class MyThread implements  Runnable{

    @Override
public void run() {
// TODO Auto-generated method stub
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ",i = " + i);
}
} }
public class StudyThread { public static void main(String[] args) throws Exception {
MyThread mt = new MyThread();
new Thread(mt,"线程A").start();
new Thread(mt,"线程B").start();
new Thread(mt,"线程C").start();
} }

以上的代码执行中感觉像是所有的线程对象都同时休眠了。但是严格来讲不是同时,是有先后顺序的,只不过这个顺序小一点而已

package cn.mysterious.study3;

class MyThread implements  Runnable{

    @Override
public void run() {
// TODO Auto-generated method stub
for (int i = 0; i < 100; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ",i = " + i);
}
} }
public class StudyThread { public static void main(String[] args) throws Exception {
MyThread mt = new MyThread();
Thread t = new Thread(mt,"线程A");
t.start();
Thread.sleep(2000);
t.interrupt(); // 中断 }
}

后续会使用休眠来进行线程的分析

    线程的优先级
        从理论上来讲优先级越高的线程越有可能先执行。而在 Thread 类里面定义有一下的优先级操作方法:
            设置优先级: public final void setPriority(int newPriority)
            取得优先级: public final int getPriority()
        而对于优先级一共定义有三种:
            最高优先级: public static final int MAX_PRIORITY:    10
            中等优先级: public static final int NORM_PRIORITY:    5
            最小优先级: public static final int MIN_PRIORITY:    1

        范例:观察优先级

package cn.mysterious.study3;

class MyThread implements  Runnable{

    @Override
public void run() {
// TODO Auto-generated method stub
for (int i = 0; i < 100; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ",i = " + i);
}
} }
public class StudyThread { public static void main(String[] args) throws Exception {
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);
t2.setPriority(Thread.MIN_PRIORITY);
t3.setPriority(Thread.MIN_PRIORITY);
t1.start();
t2.start();
t3.start();
} }

范例:主线程的优先级是什么呢?

    public class StudyThread {

        public static void main(String[] args) throws Exception {
System.out.println(Thread.currentThread().getPriority());
} }

可以发现主线程属于中等优先级或者叫一般优先级
            
    总计
        1.线程要有名字, Thread.currentThread 取得当前线程
        2.线程的休眠是有先后顺序的
        3.理论上线程的优先级越高越有可能先执行

菜鸡的Java笔记 - java 线程常用操作方法的更多相关文章

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

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

  2. Java 笔记 —— java 和 javac

    Java 笔记 -- java 和 javac h2{ color: #4ABCDE; } a{ text-decoration: none !important; } a:hover{ color: ...

  3. java笔记--使用线程池优化多线程编程

    使用线程池优化多线程编程 认识线程池 在Java中,所有的对象都是需要通过new操作符来创建的,如果创建大量短生命周期的对象,将会使得整个程序的性能非常的低下.这种时候就需要用到了池的技术,比如数据库 ...

  4. java 笔记(5) —— 线程,yield,join

    一.线程各个状态与转换: 新建状态:用new语句创建的线程对象处于新建状态,此时它和其它的java对象一样,仅仅在堆中被分配了内存 .就绪状态:当一个线程创建了以后,其他的线程调用了它的start() ...

  5. java笔记--守护线程的应用

    守护线程的应用 Java中的线程可以分为两类,即用户线程和守护线程.用户线程是为了完成任务,而守护线程是为其他线程服务 --如果朋友您想转载本文章请注明转载地址"http://www.cnb ...

  6. 菜鸡的Java笔记 - java 常用类库

    CommonClassLibrary 常用类库        定时调度            定时调度指的是每到一个时刻,都会自动的产生某些特定的操作形式                    con ...

  7. 菜鸡的Java笔记 - java 线程的同步与死锁 (同步 synchronization,死锁 deadlock)

    线程的同步与死锁 (同步 synchronization,死锁 deadlock)        多线程的操作方法            1.线程同步的产生与解决        2.死锁的问题     ...

  8. 菜鸡的Java笔记 - java 正则表达式

    正则表达式 RegularExpression        了解正则表达式的好处        正则表达式的基础语法        正则表达式的具体操作            content (内容 ...

  9. 菜鸡的Java笔记 java基础类库 BaseClassLibrary

    java基础类库 BaseClassLibrary        StringBuffer 类的特点        StringBuffer,StringBuilder,String 类之间的关系   ...

随机推荐

  1. react-native移动端设置android闪屏页

    前言 因为app启动时会白屏一段时间,导致让人用起来非常的不舒服,后来了解一下知道这叫做闪屏 于是着手解决这个白屏的问题,换个颜色?不行,不如用一张好看的图片来替换,这样才让人看起来更加舒服. 那么该 ...

  2. Spring面试复习整理

    Spring Spring核心分为三方面: 控制反转(IoC): 就是将创建对象的权利交给框架处理/控制,不需要人为创建,有效降低代码的耦合度,降低了开发成本. 依赖注入(DI): 容器动态地将将某种 ...

  3. Go语言之数组与切片基础

    一.数组 数组是同一类型元素的集合,可以放多个值,但是类型一致,内存中连续存储 Go 语言中不允许混合不同类型的元素,而且数组的大小,在定义阶段就确定了,不能更改 1.数组的定义 // 定义一个大小为 ...

  4. 使用ffmpeg进行视频图片提取

    环境:windows10-x64 ffmpeg的功能很强大,可以进行音频和视频的处理,这里记录下需要从视频文件提取图片的情况. ffmpeg官方地址:https://www.ffmpeg.org/使用 ...

  5. 找出某名珍贵药材的生长区域(ArcPy实现)

    一.背景 某种珍贵药材生长于山区,通过研究了解到这种药材生长具有严格的生长条件.为了能更好地保护该药材的生长环境,现在需要使用GIS空间分析方法,将药材适合生长区域找出来,以便为该物种保护提供依据. ...

  6. Geocoding Tools(地理编码工具)

    地理编码工具 # Process: 创建地址定位器 arcpy.CreateAddressLocator_geocoding("", "", "&qu ...

  7. PAT (Basic Level) Practice (中文)1076 Wifi密码 (15分)

    1076 Wifi密码 (15分) 下面是微博上流传的一张照片:"各位亲爱的同学们,鉴于大家有时需要使用 wifi,又怕耽误亲们的学习,现将 wifi 密码设置为下列数学题答案:A-1:B- ...

  8. .Net Core中使用ElasticSearch(一)

    一.安装配置 在官网下载Es,注意版本号,不同大版本号之间差异很大.我安装的是7.14.0版本 1.1 安装成服务 cmd 进入bin目录下执行 elasticsearch-service.bat i ...

  9. canvas中的优先级,.after最前,before最底,canvas中间,部件在布局下面

    <RelativeWidget>: # 画布之后 canvas.before: Color: # 白色 rgba:[1,1,1,1] Rectangle: pos:self.pos # 最 ...

  10. rocketMQ(一)基础环境

    一.安装: http://rocketmq.apache.org/dowloading/releases/ https://www.apache.org/dyn/closer.cgi?path=roc ...