zoukankan      html  css  js  c++  java
  • 多线程 Thread类 Runnable接口 线程池

    Thread

    创建新执行线程有两种方法。

    一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。创建对象,开启线程。run方法相当于其他线程的main方法。

     

    创建线程的步骤:

    1 定义一个类继承Thread。

    2 重写run方法。

    3 创建子类对象,就是创建线程对象。

    4 调用start方法,开启线程并让线程执行,同时还会告诉jvm去调用run方法。

        public static void main(String[] args) {
            //创建线程对象
            MyThread mt=new MyThread();
            //开启线程
            mt.start();
            //静态不能调用非静态,非静态能调用静态
            for(int i=0;i<100;i++){
                System.out.println(Thread.currentThread().getName()+":"+i);
            }
                    
        }

    l 另一种方法是声明一个实现 Runnable 接口的类。该类然后实现 run 方法。然后创建Runnable的子类对象,传入到某个线程的构造方法中,开启线程。

     

    创建线程的步骤。

    1、定义类实现Runnable接口。

    2、覆盖接口中的run方法。。

    3、创建Thread类的对象

    4、将Runnable接口的子类对象作为参数传递给Thread类的构造函数。

    5、调用Thread类的start方法开启线程。

    public static void main(String[] args) {
            //创建线程任务对象
            MyRunnable mr=new MyRunnable();
            //创建线程对象并明确线程任务
            Thread th=new Thread(mr);
            //开启线程
            th.start();
            //描述主线任务
            for(int i=0;i<100;i++){
                System.out.println(Thread.currentThread().getName()+":"+i);
            }
    
        }

    l Thread.currentThread()获取当前线程对象

    l Thread.currentThread().getName();获取当前线程对象的名称

     

     线程池

     使用线程池方式--Runnable接口

    l Executors:线程池创建工厂类

    l ExecutorService:线程池类

    l Future接口:用来记录线程任务执行完毕后产生的结果。线程池创建与使用

    l

    使用线程池中线程对象的步骤:

      创建线程池对象

      创建Runnable接口子类对象

      提交Runnable接口子类对象

      关闭线程池

        public static void main(String[] args) {
            //创建线程任务对象
            MyRunnable02 mr=new MyRunnable02();
            //获取线程池对象
            ExecutorService es=Executors.newFixedThreadPool(2);
            //调用方法执行线程任务
            es.submit(mr);
            es.submit(mr);
            //销毁线程池
            es.shutdown();
        }

     使用线程池方式Callable接口

    l Callable接口

    l ExecutorService:线程池类

    l Future接口:用来记录线程任务执行完毕后产生的结果。线程池创建与使用

    l 使用线程池中线程对象的步骤:

      创建线程池对象

      创建Callable接口子类对象

     提交Callable接口子类对象

      关闭线程池

    用线程实现异步计算
    2个线程,一个计算1-100的和返回,一个计算1-200的和返回

    package com.oracle.demo02;
    
    import java.util.concurrent.Callable;
    
    public class MyCallable2 implements Callable<Integer>{
        private int num;
        public MyCallable2(int num){
            this.num=num;
        }
        
        public Integer call() throws Exception {
            int sum=0;
            for(int i=1;i<=num;i++){
                sum=sum+i;
            }
            return sum;
        }
    
    }
    package com.oracle.demo02;
    
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.Future;
    
    public class Demo04 {
    
        public static void main(String[] args) throws InterruptedException, ExecutionException {
            //用线程实现异步计算
            //2个线程,一个计算1-100的和返回,一个计算1-200的和返回
            //创建线程任务对象
            MyCallable2 mc1=new MyCallable2(100);
            MyCallable2 mc2=new MyCallable2(200);
            //获取线程池对象
            ExecutorService es=Executors.newFixedThreadPool(2);
            //提交线程任务
            Future<Integer> f1=es.submit(mc1);
            Future<Integer> f2=es.submit(mc2);
            //获取返回值
            System.out.println(f1.get()+"..."+f2.get());
        }
    
    }

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    VM 下增加磁盘空间
    在APACHE服务器上的访问方式上去除index.php
    1
    数组累加兼eval性能测试
    webstorm软件使用记录
    gulp配置安装使用
    jQuery方法笔记
    搭建Grunt集成环境开发SASS
    msysgit使用方法
    十诫在天主教和新教之间的差别
  • 原文地址:https://www.cnblogs.com/longmingyeyu/p/12773874.html
Copyright © 2011-2022 走看看