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

      

  • 相关阅读:
    .NET 中的Cache
    ASP.NET Forms身份认证
    深入浅出JavaScript (一)初识
    在线生成 Loading进度条图片网站
    放眼2011:中国管理软件四大趋势分析
    2011BI展望:移动商业智能决胜未来
    企业关注:国内BI市场将呈四大趋势发展
    安家啦
    清理SqlServer日志方法
    云计算添翼移动BI 企业决策运筹帷握
  • 原文地址:https://www.cnblogs.com/a591378955/p/7966420.html
Copyright © 2011-2022 走看看