zoukankan      html  css  js  c++  java
  • 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";
        }
    
    }
  • 相关阅读:
    Java 概述
    vue组件事件
    小程序注册
    小程序基础知识梳理
    小程序简介
    公众号
    jeecg-boot
    小程序背景图
    bootstrap-select采坑
    存取cookie
  • 原文地址:https://www.cnblogs.com/SasaL/p/10185233.html
Copyright © 2011-2022 走看看