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

      

  • 相关阅读:
    创业者要有杀手气质和传教士能力
    一次只专心地做一件事,全身心地投入并积极地希望它成功
    以变应变,才有出路
    得到的并不一定就值得庆幸,失去的也并不完全是坏事情
    独处可以激发思考的力量
    把情感装入理性之盒
    随着现实的变化,我们必须随之调整自己的观念、思想、行动及目标
    岁月在变迁,彼此在成长。而我在流浪
    [TJOI 2016&HEOI 2016]排序
    [HAOI 2008]糖果传递
  • 原文地址:https://www.cnblogs.com/a591378955/p/7966420.html
Copyright © 2011-2022 走看看