• java 线程 (二) 线程池


    package cn.sasa.demo2;
    
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    public class Test {
        public static void main(String[] args) {
            /**
             * 线程状态
             * Thread.State
             * 
             * NEW
             * 至今尚未启动 new ...()
             * 
             * RUNNABLE
             * 正在执行 start()
             * 
             * BLOCKED
             * 受阻塞 并 等待某个监视器锁
             * 
             * WAITING
             * 无限期等待另一个线程来执行某一特定操作的线程 
             * wait() 等待 notify()唤醒 
             * 
             * TIMED_WAITING
             * 等待另一线程来执行,有等待时限 休眠 sleep()
             * 
             * TERMINATED
             * 已退出---- run()结束  /  stop() 已过时
             * 
             * 受阻塞:线程具有CPU的执行资格,等CPU的资源
             * 休眠等待:线程放弃CPU的执行资格
             * 
             * 线程池
             * 从jdk5之后内置线程池
             * 
             * 1、使用工厂类Executors 中的静态方法创建线程对象,指定线程的个数
             * 2、调用newFixedThreadPool 返回线程池对象 ExecutorService
             * 
             */
            ExecutorService es = Executors.newFixedThreadPool(2);
            es.submit(new Runnable() {
                public void run() {
                    System.out.println(Thread.currentThread().getName() + "...hello");
                }
            });
            
            es.submit(new Runnable() {
                public void run() {
                    System.out.println(Thread.currentThread().getName() + "...abc");
                }
            });
            
            es.submit(new Runnable() {
                public void run() {
                    System.out.println(Thread.currentThread().getName() + "...hahaha");
                }
            });
            
            //shutdown 销毁线程池,不常用,因为建立线程池就是为了线程不被销毁
            //es.shutdown();
            
            for(int i=0; i<100; i++) {
                System.out.println(i);
            }
        }
    }

    创建线程的第三种方式:实现Callable接口,传入线程池

    实现Callable接口中的call方法,可以有返回值,可以抛异常

    package cn.sasa.demo3;
    
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.Future;
    
    public class Test {
        public static void main(String[] args) {
            //创建线程的第三种方式:实现Callable接口 传入线程池
            //Callable 可以有返回值,可以抛异常
            ExecutorService es = Executors.newFixedThreadPool(2);
            Future<String> strf = es.submit(new MyCallable());
            try {
                System.out.println(strf.get());
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (ExecutionException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    package cn.sasa.demo3;
    
    import java.util.concurrent.Callable;
    
    public class MyCallable implements Callable<String> {
    
        @Override
        public String call() throws Exception {
            return "ho ho ho";
        }
    
    }
  • 相关阅读:
    D
    pat 甲级 1003 Emergency(最短路计数)
    Goldbach
    pta 1148 Werewolf
    CodeForces
    pta 1144 The Missing Number
    2020团体程序设计天梯赛 L1-3 洛希极限
    2020团体程序设计天梯赛 L1-2 猫是液体
    2020团体程序设计天梯赛 L1-1 嫑废话上代码
    2020年团体程序设计天梯赛-题解
  • 原文地址:https://www.cnblogs.com/SasaL/p/10185233.html
Copyright © 2020-2023  润新知