多线程基础

多线程

线程的创建方式

线程的创建方式有两种(官方api文档)

  • 继承Tread类,并重写其中的run方法
  • 实现Runnable接口,并重写run方法

还有两种是

  • 通过线程池创建线程
  • 实现Callable接口重写call方法

线程的启动

通过调用线程的start方法启动线程

继承Thread类

  class PrimeThread extends Thread {
         @Override
         public void run() {
             // compute primes larger than minPrime
              . . .
         }
  }
  ...
  PrimeThread p = new PrimeThread();
  p.start();

实现Runnable接口

class PrimeRun implements Runnable {
         public void run() {
             // compute primes larger than minPrime
              . . .
         }
}
PrimeRun p = new PrimeRun();
new Thread(p).start();

一个线程不能被启动多次,如果已经启动然后再次启动,会抛出异常IllegalThreadStateException

线程的生命周期

在这里插入图片描述
创建,可执行,执行,堵塞,死亡
堵塞后不能直接进入执行状态,只会进入可执行的状态
参考博客:https://www.jianshu.com/p/468c660d02da

Thread 创建时的一些小知识

  • 创建Thread时,默认有一个线程名,以Thread-开头,从0开始计时
public Thread() {
  init(null, null, "Thread-" + nextThreadNum(), 0);
}
  • 如果在构造Thread时没有传递Runnable或者没有重写run方法,该Thread将不会调用任何东西
public void run() {
        if (target != null) {
            target.run();
        }
    }
  • 如果构造线程对象时没有传入ThreadGroup,Thread会默认获取父线程的ThreadGroup作为该线程的ThreadGroup,此时子线程和父线程会在同一个ThreadGroup中
if (g == null) {
  g = parent.getThreadGroup();
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

巴中第一皇子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值