• 十三、多线程


    1、实现线程的两种方式

    (1)继承Thread类

      Thread构造方法:public Thread(String threadName)

                public Tread()

      重写run()方法,并调用start()执行线程。

      语法:public static void main(String [] args){

            new ThreadTest().start();

          }

    (2)实现Runnable接口

      语法:public class Thread extends Object implements Runnable

      实现Runnable接口会创建Thread对象,并将Runnable对象和Thread对象相关联。

      Thread构造方法:public Thread(Runnable r)

                public Thread(Runnable r,String name)

      步骤:1)建立Runnable对象

         2)使用参数为Runnable对象的构造方法创建Thread实例。

         3)调用start()方法启动线程。

      创建Runnable对象:编写一个实现Runnable接口的类,然后实例化该类的对象。

    2、线程的生命周期

    (1)出生状态:调用start()前

    (2)就绪状态:调用start()

    (3)运行状态:得到系统资源后

    (4)等待状态:调用wait(),进入等待状态的线程必须调用notify()或notifyAll()才能被唤醒。

    (5)休眠状态:调用sleep()

    (6)阻塞状态:在运行状态下发出输入/输出请求时

    (7)死亡状态:run()方法结束

    3、操作线程的方法

    (1)休眠:sleep()方法

            try{

            Thread.sleep(200);

            }catch(InterruptedException e){

              e.printStackTrace();  

            }

    (2)加入:join()方法

          Thread.join()

    (3)中断:run()方法中使用无线循环,再用一个boolean标记控制循环的停止。  

     1 public class InterruotedTest implements Runnable{
     2     private boolean isContinue = false;
     3     @Override
     4     public void run() {
     5         // TODO Auto-generated method stub
     6         while(true){
     7             //...
     8             if(isContinue)
     9                 break;
    10         }    
    11     }
    12     public void setContinue(){
    13         this.isContinue = ture;
    14     }
    15 }

      如果线程是通过sleep()或wait()进入就绪状态的,则可以使用interrupt()方法使线程离开run()方法,同时结束线程跑,程序会抛InterruptException异常。

    (4)线程礼让:yield()方法

    4、线程的优先级

      线程的优先级可以用setPriority()方法进行调整。

    5、线程同步:

      同步机制关键字synchronized

    (1)同步块

      语法:synchronized(Object){...}

    (2)同步方法

      语法:synchronized void f(){}

    6、线程间的通信

      wait与sleep的区别在于wait释放锁,sleep不释放锁

      wait(time):在time内暂停

      wait():永久等待,需要用notify或notifyAll唤醒

      wait()与notify()、notifyAll()只能在同步块或者同步方法中使用。

  • 相关阅读:
    JavaScript 多个空格替换成1个空格
    「DIARY」NOI2021 小结
    kubernetes常用命令总结
    Qt绘图(使用QPainter)翻转图像的两种方法
    android 11 R framework 新特证 开发备忘
    浏览器的缓存机制
    记el-tree 懒加载复选框回显的坑
    VUE根据文件流下载EXC
    西瓜视频播放器VUE
    推荐系统打散算法--权重
  • 原文地址:https://www.cnblogs.com/yl-saber/p/6015307.html
Copyright © 2020-2023  润新知