Java中Thread类的基本用法

  Thread类是Java的内置类,可以直接进行调用,我们一般使用直接使用Thread类名直接使用其方法。

线程的创建:

线程的创建有三种方法:1.继承Thread类重写run方法 2.实现Runnable接口重写run方法 3.实现Calllble接口重写call方法。

1.继承Thread类重写run方法

class MyThread extends Thread{
    @Override
    public void run() {
        
    }
}

2.实现Runnable接口重写run方法

class MyThread implements Runnable{

    @Override
    public void run() {
        
    }
}

3.实现Calllble接口重写call方法

这时候我们需要注意我们不能直接将这个callable实例直接放入到线程的构造方法中,这时候我们需要对其进行包装,我们使用FutureTask进行包装,将包装后的FutureTask实例才能放入Thread的构造方法中。

Callable<Integer> callable = new Callable<Integer>() {
    @Override
    public Integer call() throws Exception {
        return 0;
    }
};
FutureTask<Integer> futureTask = new FutureTask<>(callable);
Thread thread = new Thread(futureTask);

线程的中断:

Thread thread=new Thread(){
    @Override
    public void run() {
        
    }
};
thread.interrupt();

我们有两种方式可以判断线程是否被中断:

1.Thread.interrupted()
2.Thread.currentThread().isInterrupted()

第一个方法是直接通过Thread调用其类方法。

第二个方法是通过Thread.currentThread获取到该线程实例,然后调用其isInterrupted方法。

当线程调用wait(),sleep(),join()方法处于阻塞状态的时候,收到了中断通知时,会抛出异常,抛出异常之后线程的中断状态会被清除。

当线程没有调用wait(),sleep(),join()方法时,当收到中断通知时,Thread.interrupted()会判断当前线程是否被中断,若中断状态为true,清除当前状态置为false。

而Thread.currentThread().isInterrupted()会判断当前线程是否被中断,若中断状态为true,不会清除当前状态。保持为true;

线程的等待:

我们有时候需要一个线程等待另一个线程的时候,我们就可以使用Object类提供的wait()方法,注意wait()方法需要搭配sychronized进行使用,wait()可以让线程处于等待状态,无法继续执行下面的程序,然后会释放锁资源,然后等待其他线程唤醒,我们通过notify()可以唤醒线程,notify()也需要搭配synchornized。wait方法中可以写入一个参数,这个参数是等待时间,当等待的时候超过时间约束,那就会自动被唤醒,继续执行之后的操作,当我们没有传入参数的时候,这个线程就会死等,如果没有其他线程对其进行唤醒,那这个线程会一直处于等待状态。

线程的休眠:

我们使用Thread类里面的sleep方法可以让线程休眠一段时间,sleep不要配合synchronized进行使用,可以进行单独使用,当我们使用slee方法时需要传入一个时间参数。当休眠时间大于这个时间的时候,这个线程会继续之后的操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值