多线程的细节

-------------------------------------

1,sleep,wait区别

    相同点:可以让线程处于冻结状态。
            不同点:
            1,
            sleep必须指定时间。
            wait可以指定时间,也可以不指定时间。
            2,
            sleep时间到,线程处于临时阻塞或者运行。
            wait如果没有时间,必须要通过notify或者notifyAll唤醒。
            3,
            sleep不一定非要定义在同步中。
            wait必须定义在同步中。
            4,
            都定义在同步中,
            线程执行到sleep,不会释放锁。
            线程执行到wait,会释放锁.

    总结:小朋友抓人,sleep会自己醒,而wait需要别人叫你.线程要有拿到锁和有执行权时才能运行,在第四点中wait和sleep都会释放执行权,

-------------------------------------

2,停止线程-定义标记

  思想:通过标记控制循环就可以了,把标记加入条件语句中可以用while(flag),通过改变标记的状态.代码如下

 

//演示停止线程-定义标记。
class Demo implements Runnable
{
    private boolean flag = true;
    public synchronized void run()
    {
        while(flag)
        {
              System.out.println(Thread.currentThread().getName()+"----->");
                         }
      }
    //对标记的修改方法。
    public void changeFlag()
    {
        flag = false;
    }
}
class StopThreadDemo 
{
    public static void main(String[] args) 
    {
             Demo d = new Demo();
             Thread t1 = new Thread(d);
        Thread t2 = new Thread(d);
                 t1.start();
                 t2.start();
                int x = 0;
        while(true)
        {
            if(++x == 50)//条件满足。
            {
                            d.changeFlag();//改变标记,让其他线程停止
                               break;//调出循环,让主线程停止

                                   }
                  }
          }
}

-------------------------------------

3,停止线程-interrupt方法

  出现问题:如果线程处于冻结状态,就无法判断标记,就无法结束。

  分析问题:这时就需要通过结束线程的冻结状态让其恢复到运行状态。

  解决问题:可以通过Thread类中的interrupt方法解决这个问题.

  注意:该方法会使线程出现InterruptedException异常,要做出处理方式

  

//演示停止线程。
class Demo implements Runnable
{
    private boolean flag = true;
    public synchronized void run()
    {
        while(flag)
        {
            try
            {
                wait();//t1  t2
            }
            catch (InterruptedException e)
            {
                System.out.println(Thread.currentThread().toString()+"....."+e.toString());
                changeFlag();
            }

            System.out.println(Thread.currentThread().getName()+"----->");
        }
    }
    //对标记的修改方法。
    public void changeFlag()
    {
        flag = false;
    }
}


class StopThreadDemo 
{
    public static void main(String[] args) 
    {
        Demo d = new Demo();

        Thread t1 = new Thread(d);
        Thread t2 = new Thread(d);
        t1.start();
        //将t2标记为后台线程,守护线程。
//        t2.setDaemon(true);
        t2.start();

        int x = 0;
        while(true)
        {
            if(++x == 50)//条件满足。
            {
//                d.changeFlag();//改变线程任务代码的标记,让其他线程也结束。
                //对t1线程对象进行中断状态的清除,强制让其恢复到运行状态。
                t1.interrupt();
                //对t2线程对象进行中断状态的清除,强制让其恢复到运行状态。
                t2.interrupt();

                break;//跳出循环,主线程可以结束。
            }
            System.out.println("main-------->"+x);
        }

        System.out.println("over");
    }
}

-------------------------------------

4,其他方法-[守护线程]

  a,守护线程:是后台线程.我们一般创建是前台线程,打个比喻,把前台线程比作是演员,后台线程比作是放音乐的,当演员结束了,后代线程也就自动结束了.(1)前台后台线程运行时过都是一样的,获得CPU的执行权,(2)他们都可以通过RUN方法结束.上面讲的演员放音乐是一个特殊的例子.

  b,优先级(三个常量值,也可以设置其他的值1-10),线程组。

  c,join方法:加入一个执行线程。
      d,yield方法:暂停线程,释放执行权。
      e,线程的匿名内部类。【面试题】
                new Thread(new Runnable()
                {
                    public void run()
                    {
                        System.out.println("runnable run");
                    }
                }){
                    public void run()
                    {
                        System.out.println("subthread run");//执行。
                    }
                }.start();

 

乐播投屏是一款简单好用、功能强大的专业投屏软件,支持手机投屏电视、手机投电脑、电脑投电视等多种投屏方式。 多端兼容与跨网投屏:支持手机、平板、电脑等多种设备之间的自由组合投屏,且无需连接 WiFi,通过跨屏技术打破网络限制,扫一扫即可投屏。 广泛的应用支持:支持 10000+APP 投屏,包括综合视频、网盘与浏览器、美韩剧、斗鱼、虎牙等直播平台,还能将央视、湖南卫视等各大卫视的直播内容一键投屏。 高清流畅投屏体验:腾讯独家智能音画调校技术,支持 4K 高清画质、240Hz 超高帧率,低延迟不卡顿,能为用户提供更高清、流畅的视觉享受。 会议办公功能强大:拥有全球唯一的 “超级投屏空间”,扫码即投,无需安装。支持多人共享投屏、远程协作批注,PPT、Excel、视频等文件都能流畅展示,还具备企业级安全加密,保障会议资料不泄露。 多人互动功能:支持多人投屏,邀请好友加入投屏互动,远程也可加入。同时具备一屏多显、语音互动功能,支持多人连麦,实时语音交流。 文件支持全面:支持 PPT、PDF、Word、Excel 等办公文件,以及视频、图片等多种类型文件的投屏,还支持网盘直投,无需下载和转格式。 特色功能丰富:投屏时可同步录制投屏画面,部分版本还支持通过触控屏或电视端外接鼠标反控电脑,以及在投屏过程中用画笔实时标注等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大望dawang

谢谢你请的咖啡

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

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

打赏作者

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

抵扣说明:

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

余额充值