【JAVA学习之路 | 提高篇】Thread类常用结构

简介: 【JAVA学习之路 | 提高篇】Thread类常用结构

1.构造器

  • public Thread() : 创建一个线程对象.
  • public Thread(String name) : 分配一个指定名字的线程对象
  • public Thread(Runnable target) : 创建了目标线程的对象,并实现了Runnable接口的run()方法.
  • public Thread(Runnable target, String name) : 分配一个带有指定目标(实现接口)的线程对象,并指定了一个名字.

2.常用方法

  • public void run() : 此线程要指定的任务在此处定义代码.
  • public void start() : 启动此线程,java虚拟机调用此线程的run().
  • public static Thread currentThread() : 返回对当前执行的线程对象的引用.
  • public String getName() : 获取当前线程对象的名字.
  • public void setName() : 设置当前线程对象的名字.
  • public static void sleep(lomg mills) : 使当前代码执行的线程以毫秒数暂停.(静态方法 : 与对象调用无关,与在哪个线程调用有关)
  • public static void yield() : 执行该方法,释放该线程的CPU执行权,让系统的线程调度器重新调度一次.
  • void join() : 等待该线程终止.
  • (重载)void join(long mills) : 等待该线程终止的时间最长为mills毫秒.
  • public final boolean isAlive() : 测试线程是否处于活跃状态.
  • (过时方法)public final void stop() : 强制结束一个线程的执行,直接进入Dead状态
public class SingerTest {
    public static void main(String[] args) {
        //构造器赋值
        SinThread s = new SinThread("线程1");
        //steXxx方法赋值
        s.setName("线程-1");
        s.start();
        for (int i = 0; i <= 100; i++) {
            if (i % 2 == 1) {
                System.out.println(Thread.currentThread().getName() + "\t\t" + i);
            }
        }
    }
}
 
class SinThread extends Thread{
    public SinThread() {
        super();
    }
 
    public SinThread(String name) {
        super(name);
    }
 
    @Override
    public void run() {
        for (int i = 0; i <= 100; i++) {
            if (i % 2 == 0) {
                System.out.println(Thread.currentThread().getName() + "\t\t" + i);
            }
        }
    }
}
 
控制台
线程-1    0
main    1
线程-1    2
main    3
main    5
main    7
main    9
线程-1    4

调用sleep()方法 : 该方法是static方法,与对象调用无关,与处在哪个线程调用该方法有关.该处在main线程调用sleep方法,故暂停主线程10000ms.

接上
try {
            //sleep()源码 : public static native void sleep(long millis) throws InterruptedException;
            s.sleep(10000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        s.start();
 
暂停主线程,故线程-1调用CPU概率更高
控制台
线程-1    0
线程-1    2
线程-1    4
线程-1    6
线程-1    8
线程-1    10
10s后
main    1
main    3
main    5
main    7
main    9
main    11

调用join()方法 :

s.start();
        try {
            s.join();
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
 
调用join()方法,直到s线程执行完,主线程才开始执行
 
控制台
线程-1    0
线程-1    2
线程-1    4
线程-1    6
线程-1    8
线程-1    10
线程-1    12
线程-1    14
线程-1    16
线程-1    18

3.线程优先级

每个线程都要一定的优先级,同优先级线程组成先进先出队列,使用分时调度策略.优先级高的线程采用抢占式调度策略,有更多的执行机会,只是多了机会,并不是一定就执行优先级高的线程.每个线程的优先级都与创建他的父线程具有相同的优先级.

优先级常量 :

  • MAX_PRIORITY(10)最高优先级
  • NORM_PRIORITY(5)普通优先级
  • MIN_PRIORITY(1)最低优先级

public final int getPriority() : 返回线程优先级.

public final void setPriority(int newPriority) : 设置线程优先级,范围1-10.

4.线程的生命周期

 
                            计时等待
                         TIMED_WAITING
 
 
    新建 ----------> 准备 ---------->运行 ----------->死亡
    New             Ready          Running            Dead
 
 
 
                锁阻塞                        无线等待
               BLOCKED                       WAITING


相关文章
|
15小时前
|
设计模式 安全 Java
Java中的单例模式是一种设计模式,它保证一个类只有一个实例,并提供一个全局访问点
Java单例模式确保类仅有一个实例,并提供全局访问点。常见实现包括: - 饿汉式:静态初始化,线程安全。 - 懒汉式:延迟初始化,需同步保证线程安全。 - 双重检查锁定:优化懒汉式,减少同步开销。 - 静态内部类:延迟加载,线程安全。 - 枚举:简洁线程安全,不适用于复杂构造。 - 容器实现:如Spring框架,用于依赖注入。选择依据需求,如延迟加载、线程安全和扩展性。
31 10
|
2天前
|
Java API 索引
java中ArrayList类常用API
java中ArrayList类常用API
|
2天前
|
Java API 索引
java中String类常用API
java中String类常用API
|
2天前
|
Java
杭电acm1201 18岁生日 Java解法 时间类
杭电acm1201 18岁生日 Java解法 时间类
5 0
|
2天前
|
Scala
scala 读取文件(中文)异常 thread "main" java.nio.charset.MalformedInputException: Input length = 1
scala 读取文件(中文)异常 thread "main" java.nio.charset.MalformedInputException: Input length = 1
4 0
|
2天前
|
存储 JSON 前端开发
JavaWeb中用来定义统一的响应结果的result类
JavaWeb中用来定义统一的响应结果的result类
8 0
|
缓存 安全 Java
JAVA Thread Dump分析线程竞争
JAVA Thread Dump分析线程竞争
62 0
|
Java
Java基础系列-第一章 创建Thread的6种方式和线程常用方法
读完本章节,您将掌握如何创建线程和线程的常用方法。
124 1
Java基础系列-第一章 创建Thread的6种方式和线程常用方法
Java 继承Thread实现线程
本文目录 1. 知识点 2. 实现 3. 测试