• 多线程


    一、线程的五种状态:

      1、新建状态:线程对象已经创建,还没有在其上调用start()方法

      2、可运行状态:当线程有资格运行,但调度程序还没有把它选定为运行线程时线程所处的状态。

        当start()方法调用时,线程首先进入可运行状态。在线程运行之后或者从阻塞、等待或睡眠状态回来后,也返回到可运行状态。

      3、运行状态:线程调度程序从可运行池中选择一个线程作为当前线程时线程所处的状态。这也是线程进入运行状态的唯一一种方式。

      4、等待/阻塞/睡眠状态:这是线程有资格运行时它所处的状态。

        实际上这个三状态组合为一种,其共同点是:线程仍旧是活的,但是当前没有条件运行。

      5、死亡态:当线程的run()方法完成时就认为它死去。

        这个线程对象也许是活的,但是,它已经不是一个单独执行的线程。

        线程一旦死亡,就不能复生。

        如果在一个死去的线程上调用start()方法,会抛出java.lang.IllegalThreadStateException异常。

     二、线程池

        

        

        

    public static void main(String[] args) {
            //调用工厂类的静态方法,创建线程池对象
            //返回线程池对象,返回的是接口类型
            ExecutorService es = Executors.newFixedThreadPool(10);
            //调用接口实现类对象es的方法submit提交任务
            //将runnable接口实现类对象传进去
            es.submit(new ThreadPoolRunnable());//ThreadPoolRunnable是runnable的实现类
        }

    三、线程同步

      1、同步代码块

        

    synchronized (Object obj){
           //运行代码     
    }

      2、同步方法

    public synchronized void getTicket(){
             //同步方法的锁是本类对象this   
    }

      3、静态方法

    public static void getTicket(){
        synchronized(Ticket.class){
             //同步方法的锁是本类对象this
         }   
    }

      4、Lock接口

       

    private Lock lock = new ReentrantLock();
    public void getTicket(){
        lock.lock();
        { 代码}
        lock.unlock();
    }

      

  • 相关阅读:
    家庭内网向导帮助文档
    Nginx 容器连接 php rc-fpm 容器编译 php
    samba 容器实现共享
    编程思想(POP,OOP,SOA,AOP)
    OOP(面向对象编程)
    MySql5.6 Window超详细安装教程
    JAVA设计模式:状态模式
    Mysql设置创建时间字段和更新时间字段自动获取时间,填充时间
    eclipse里新建work set,将项目分组放在不同文件夹
    错误记录
  • 原文地址:https://www.cnblogs.com/a591378955/p/7966420.html
Copyright © 2020-2023  润新知