【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


相关文章
|
20小时前
|
Java 开发者
Java 面向对象编程实战:从类定义到对象应用,让你成为高手!
【6月更文挑战第15天】在Java中,掌握面向对象编程至关重要。通过创建`Book`类,展示了属性如`title`和`author`,以及构造方法和getter方法。实例化对象如`book1`和`book2`,并访问其属性。进一步扩展类,添加`pages`和`calculateReadingTime`方法,显示了类的可扩展性。在更大规模的项目中,如电商系统,可以定义`Product`、`User`和`Order`类,利用对象表示实体和它们的交互。实践是精通Java OOP的关键,不断学习和应用以提升技能。
|
20小时前
|
Java 开发者
为什么 Java 的类和对象如此重要?看完这篇你就懂了!
【6月更文挑战第15天】在Java中,类和对象是核心概念。类作为蓝图定义数据(如角色的名称和健康值)和行为(如`takeDamage`方法),而对象是类的实例,允许交互(如战士受伤)。通过继承,如`Circle`和`Rectangle`扩展`Shape`类,实现多态性,增强代码灵活性。类和对象促进代码组织、复用和可维护性,是高效软件开发的基础。
|
20小时前
|
设计模式 Java
一文掌握 Java 面向对象精髓:从类定义到对象实战
【6月更文挑战第15天】Java面向对象编程初学者指南:类是对象模板,如`Person`类含`name`和`age`属性。创建对象用`new`,如`Person person = new Person()`。访问属性如`person.name=&quot;Alice&quot;`,调用方法如`person.sayHello()`。类能继承,如`Student extends Person`。对象间共享数据可传参或共用引用。多态性允许父类引用调用子类方法。注意对象生命周期和内存管理,避免内存泄漏。通过实践和理解这些基础,提升编程技能。
|
20小时前
|
Java
深入 Java 面向对象:类的定义,竟然藏着这么多门道!
【6月更文挑战第15天】Java中的类定义是OOP的基础,它封装属性(如Student的name和age)和行为(如study())。简单的类仅触及表面,而复杂的类可模拟真实世界对象的多样性和交互。类还可通过继承扩展,如Student从Person派生,增加特有属性和行为。接口和抽象类等概念进一步增强了灵活性和可扩展性。类定义的深度和广度是构建高效、可维护代码的关键。
|
20小时前
|
Java
别再被 Java 类和对象绕晕了!一篇文章让你秒懂!
【6月更文挑战第15天】Java中的类是对象的模板,定义属性(如姓名、年龄)和行为(如走路、说话)。对象是类的实例,有自己的属性值。例如,`Person`类可创建`Person`对象,赋予属性值并调用方法。同样,`Car`类可创建不同品牌的汽车对象,每个对象能加速或刹车。理解类与对象的关系是Java面向对象编程的基础。
|
3天前
|
安全 Java API
Java并发基础-启动和终止线程
Java并发基础-启动和终止线程
13 0
|
3天前
|
Java 调度
Java并发基础-线程简介(状态、常用方法)
Java并发基础-线程简介(状态、常用方法)
8 0
|
1天前
|
监控 Java API
Java 程序设计 第八章 线程
Java 程序设计 第八章 线程
|
1天前
|
存储 安全 Java
Java多线程编程--JUC
Java多线程编程
|
2天前
|
缓存 NoSQL Java
Java高并发实战:利用线程池和Redis实现高效数据入库
Java高并发实战:利用线程池和Redis实现高效数据入库
12 0