zoukankan      html  css  js  c++  java
  • 多线程

    一、线程的五种状态:

      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();
    }

      

  • 相关阅读:
    vi/vim键盘图
    PostgreSQL学习----命令或问题小结
    PostgreSQL学习----模式schema
    OSM
    Spring基础(9) : 自动扫描
    Spring基础(8) : properties配置文件
    Spring基础(8) : 延迟加载,Bean的作用域,Bean生命周期
    Spring基础(7) : Bean的名字
    Spring基础(6) : 普通Bean对象中保存ApplicationContext
    Spring基础(5): 构造函数注入无法处理循环依赖
  • 原文地址:https://www.cnblogs.com/a591378955/p/7966420.html
Copyright © 2011-2022 走看看