第二篇:线程的方法

1.sleep() 方法

让当前线程休眠指定的时间(毫秒)

让出cpu执行权,但是并没有释放这个线程拿到的锁

 当前线程调用sleep方法,当前线程会进入阻塞态,在阻塞态中呆一段时间,就会进入就绪态

2.yield() 方法

使当前线程让出(释放)CPU执行时间片,与其他线程一起重新竞争CPU时间片。在一般情况下,优先级高的线程更有可能竞争到CPU时间片

也就是说,yield()方法会让当前线程从运行态进入就绪态

总结:

sleep():会让线程从运行态进入到阻塞态(在阻塞态呆一段时间),然后再进入就绪态

yield():会让线程直接从运行态进入到就绪态

3.wait() 方法

多个线程共用一把锁,哪个线程拿到锁了,在这个线程中使用obj.wait()方法,这个线程就是把锁释放出去,让其他被唤醒的线程抢这把锁,自己则进入等待队列中

也就是说三个线程状态:拿到锁,可能获得锁的状态,等待队列(无法获得锁)

      Thread t1 = new Thread( () ->
        {
            synchronized (obj) 
            {
                
            }
        });

      Thread t2 = new Thread( () ->
        {
            synchronized (obj) 
            {
                
            }
        });

      Thread t3 = new Thread( () ->
        {
            synchronized (obj) 
            {
                
            }
        });

在哪个线程中调用obj.wait()方法,这个线程就让出锁,进入等待队列,直到其他线程中调用obj.notify()或者obj.notifyAll()方法,就可以竞争锁的占有权

4.notify方法和notifyAll方法

notify方法:唤醒在此对象监视器上等待的一个线程,如果所有线程都在此对象上等待,则会选择唤醒其中一个线程,选择是任意的

notifyAll方法:用于唤醒在监视器上等待的所有线程

程序员甲和乙共用一块肥皂(锁),刚开始甲用了一会,然后调用了wait()方法,把肥皂交出去了,自己进入等待状态,乙拿到肥皂(锁)后,通过自己的notify()方法通知甲,告诉自己在用

然后乙把锁交出去,自己又进入等待队列中.....

5.join方法:线程的join方法:thread.join()_Pr Young的博客-CSDN博客

另外:

如何让线程停止:

不推荐使用JDK提供的stop(),destroy()方法,我们可以自己在线程类里面写一个stop方法

可以看到在run方法里面,只有当flag为true的时候才执行方法体,进行打印输出

本来是要执行1000次打印输出,但是执行到900次的时候,将调用我们写的线程的stop方法,将flag置为false,然后就不会再打印输出了

public class Test implements Runnable
{
    private boolean flag = true;

    @Override
    public void run() 
    {
        int i = 0;
        while (flag == true) 
        {
            System.out.println("Thread" + i);
        }
    }

    public void stop() 
    {
        this.flag = false;
    }
}

//将下面两行代码合成一句代码:
//Test temp=new Test();
//Thread test=new  Thread(temp);

Thread test=new Thread(new Test());

test.start();

for(int i=0;i<1000;i++)
{
   if(i==900)
   {
      test.stop();
   }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值