JAVA 线程的生命周期+多线程的创建(Runnable,Thread,Callable)+线程常用方法整理

目录

线程的生命状态

简要说明

 实例

状态整理

多线程的创建方法

使用Thread类

使用Runnable接口

使用Callable接口

Thread常用方法


线程的生命状态

简要说明

我们可以通过Thread.getState来获取当前线程状态的

返回值 源码是这样说的

返回此线程的状态。此方法设计用于监控系统状态,而不是用于同步控制。
返回值:
这个线程的状态。

 实例

        Threadtest t1 = new Threadtest();
        t1.start();
        //获取当前线程的状态
        Thread.State state = t1.getState();
        System.out.println(state);

class Threadtest extends Thread {

    @Override
    public void run() {
        for (int i = 0; i < 200; i++) {
            System.out.println(i);
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
    }
}

状态整理

面试会考

简述状态
new新建状态刚新建状态,没有被启用
runnable就绪状态

两种情况

1 正在执行

2 获得cpu时间片后就可以执行

blocked阻塞状态

两种情况

1 被某些线程阻塞

2 因等待资源被挂起

waiting无限等待状态

因为等待某些动作被阻塞(wait,join)

与上面不同的是,这种状态需要有其他线程的操作才能唤醒自身

time_waiting限期等待状态(sleep)
timeend终止状态结束线程哩喵

多线程的创建方法

使用Thread类

这是最简单的方法,但是无法获取线程返回值,而且无法去扩展程序(继承类)

 Threadtest t1 = new Threadtest();
        t1.start();

class Threadtest extends Thread {

    @Override
    public void run() {
        for (int i = 0; i < 20000; i++) {
            System.out.println(i);
        }
    }
}

使用Runnable接口

改进了使用Thread类后无法继承其他类的特点,但仍然无法获得返回值

当我们new Runnabletest时,只是创建了线程,只有使用Thread包装后的.start才算运行  

//当我们new Runnabletest时,只是创建了线程,只有使用Thread包装后的.start才算运行       
Thread t2 = new Thread(new Runnabletest());
t2.start();

class Runnabletest implements Runnable {

    @Override
    public void run() {
        for (int i = 20000; i < 50000; i++) {
            System.out.println(i);
        }
    }
}

使用Callable接口

可以获得线程的返回值了喵

这里必须要使用FutureTask去包装一下的喵,不然线程只是创建但没有运行 

//这里必须要使用FutureTask去包装一下的喵,不然线程只是创建但没有运行 
FutureTask future=new FutureTask(new Callabletest());
        future.run();
        try {
            //获得线程的返回值
            System.out.println(future.get());
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        } catch (ExecutionException e) {
            throw new RuntimeException(e);
        }
class Callabletest implements Callable{
    @Override
    public String call() throws Exception {
        return "我是返回值喵";
    }
}

Thread常用方法

yield

提示调度程序,当前线程愿意放弃当前对处理器的使用。(礼让,但不一定会成功)

join

让调用的线程等待当前线程

sleep

导致当前正在执行的线程休眠(暂时停止执行)指定的毫秒数,具体取决于系统计时器和调度程序的精度和准确性。 该线程不会失去任何监视器的所有权。

有两种方式

sleep(x)一个参数时代表休眠x毫秒

sleep(x,y)两个参数时表示休眠x毫秒又y纳秒

其中毫秒输入类型是long类型 纳秒输入类型是int类型

start

一个线程的开始,执行之后java虚拟机调用该线程的run方法

结果是两个线程同时运行:当前线程(从调用start方法返回)和另一个线程(执行其run方法)。

interrupt

中断调用方法的进程

interrupted

测试当前线程是否已被中断

如果中断返回true,否则返回false

isInterrupted

测试此线程是否已被中断。

中断则返回true否则返回false

isAlive

测试此线程是否存活。

存活返回true否则返回false

setPriority

更改该线程的优先级

getPriority

获取这个线程的优先级

setName

命名调用该方法的线程

getName

返回此线程的名称。

getThreadGroup

返回该线程的线程组

enumerate

将当前线程的线程组及其子组中的每个活动线程复制到指定的数组中

结果会返回放入数组的数组数量

setDaemon

将线程设置为守护线程

isDaemon

判断线程是否是守护线程

checkAccess

确定当前运行的线程是否具有修改此线程的权限。

toString

返回此线程的字符串表示形式,包括线程的名称,优先级和线程组。

getId

返回此Thread的标识符。 线程ID是创建此线程时生成的正数long 。 线程ID是唯一的,并且在其生命周期内保持不变。 当线程终止时,可以重用该线程ID。

getState

返回此线程的状态。 此方法设计用于监视系统状态,而不是用于同步控制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

桂亭亭

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

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

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

打赏作者

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

抵扣说明:

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

余额充值