zoukankan      html  css  js  c++  java
  • Java实现多线程--四种方法

      1 /**
      2  * 第一种
      3  * 继承thread类 重写 run方法
      4  * 调用start方法,启动线程
      5  * @author sunshine
      6  */
      7 
      8 /**
      9  * 第二种实现runnable接口,重写run方法
     10  * 接口实现类的实例作为target参数,传入带参的构造方法,调用start方法启动线程
     11  * @author sunshine
     12  */
     13 
     14 /**
     15  * 第三种通过Callable和FutureTask实现线程
     16  * 1:创建Callable类的实现类,实现call方法
     17  * 2:创建Callable实现类的实现,用FutureTask来包装实现的对象
     18  * 3:将FutureTask对象作为target参数传递给Thread构造方法
     19  * 4:调用start方法,启动线程
     20  * @author sunshine
     21  */
     22 
     23 /**
     24  * 第四种--通过线程池
     25  * ExecutorService是Java中对线程池定义的一个接口
     26  * 1:创建类,实现runnbale接口
     27  * 2:设置线程数量
     28  * 3:根据线程数量创建线程执行器
     29  * 4:执行器,执行线程
     30  * 5:关闭线程池
     31  * 
     32  * 这个方法和直接实现Runable比
     33  * 这个方法 实现Runable接口
     34  * 然后实例化对象,将参数传递给线程执行器,进行执行
     35  * @author sunshine
     36  */
     37 
     38 ------------------第一种:通过继承Thread类---------
     39 package com.www.thread;
     40 
     41 /**
     42  * 第一种
     43  * 继承thread类 重写 run方法
     44  * 调用start方法,启动线程
     45  * @author sunshine
     46  */
     47 public class Thread1ByExtendsThread extends Thread{
     48     
     49     //重写run方法
     50     public void run(){
     51         //在这里 获取当前线程的名字
     52         System.out.println(Thread.currentThread().getName());
     53     }
     54     
     55     public  static void  main(String[]  args){
     56         Thread1ByExtendsThread thread1 = new Thread1ByExtendsThread();
     57         thread1.setName("线程1--通过实现Thread类");
     58         //启动线程
     59         thread1.start();
     60         System.out.println(Thread.currentThread().toString());
     61     }
     62 }
     63 
     64 
     65 
     66        ------------------第二种:通过实现Runnablle接口---------
     67 package com.www.thread;
     68 
     69 /**
     70  * 第二种实现runnable接口,重写run方法
     71  * 接口实现类的实例作为target参数,传入带参的构造方法,调用start方法启动线程
     72  * @author sunshine
     73  */
     74 public class Thread2ByImplRunable{
     75   public static void main(String[]  args){
     76     Thread t = new Thread(new MyThread());
     77     t.start();
     78   }
     79 }
     80 
     81 class MyThread implements Runnable{
     82   @Override
     83   public void run() {
     84     System.out.println("通过实现Runnbale接口创建的线程"+Thread.currentThread().getName());
     85   }
     86 }
     87 
     88 
     89 
     90 
     91        ------------------第三种:通过实现CallAble接口和FutureTask包装器---------
     92 package com.www.thread;
     93 
     94 import java.util.concurrent.Callable;
     95 import java.util.concurrent.FutureTask;
     96 
     97 /**
     98  * 第三种通过Callable和FutureTask实现线程
     99  * 1:创建Callable类的实现类,实现call方法
    100  * 2:创建Callable实现类的实现,用FutureTask来包装实现的对象
    101  * 3:将FutureTask对象作为target参数传递给Thread构造方法
    102  * 4:调用start方法,启动线程
    103  * @author sunshine
    104  */
    105 public class Thread3ByCallableAndFutureTask {
    106  public static void main(String[]  args){
    107   Callable<Object> callAble = new CallImpl<Object>();
    108   FutureTask<Object> task = new FutureTask<Object>(callAble);
    109   Thread t = new Thread(task);
    110   System.out.println(Thread.currentThread().getName());
    111   t.start();
    112   }
    113 }
    114 
    115 class CallImpl<Object> implements Callable<Object>{
    116   @Override
    117   public Object call() throws Exception {
    118   System.err.println(Thread.currentThread().getName()+"我是通过实现callable" +
    119   "接口通过FutureTask包装器来实现线程");
    120   return null;
    121   }
    122 }
    123 
    124 
    125 
    126 
    127 
    128        ------------------第四种:通过线程池---------
    129 package com.www.thread;
    130 
    131 import java.util.concurrent.Executor;
    132 import java.util.concurrent.ExecutorService;
    133 import java.util.concurrent.Executors;
    134 
    135 /**
    136  * 第四种--通过线程池
    137  * ExecutorService是Java中对线程池定义的一个接口
    138  * 1:创建类,实现runnbale接口
    139  * 2:设置线程数量
    140  * 3:根据线程数量创建线程执行器
    141  * 4:执行器,执行线程
    142  * 5:关闭线程池
    143  * 
    144  * 这个方法和直接实现Runable比
    145  * 这个方法 实现Runable接口
    146  * 然后实例化对象,将参数传递给线程执行器,进行执行
    147  * @author sunshine
    148  */
    149 public class Thread4ByThreadPool {
    150     public static  int POOL_NUM = 5;//定义最大线程数为5
    151     public static void main(String[]  args){
    152         ExecutorService service = Executors.newFixedThreadPool(POOL_NUM);
    153         for(int i = 0; i<POOL_NUM; i++){
    154             MyThread4 thread = new MyThread4();
    155             service.execute(thread);
    156         }
    157         service.shutdown();
    158     }
    159 }
    160 
    161 class MyThread4 implements Runnable{
    162     @Override
    163     public void run() {
    164         System.out.println("通过线程池创建的线程"+Thread.currentThread().getName());
    165     }
    166     
    167 }
    168 
    169 
    
    
  • 相关阅读:
    Tips——RN HTML两端通信
    Tips——RN如何动态地添加删除组件
    Tips——RN webview如何实现首次加载自动登录及后续定时登录
    Between Us 1 生命的起源
    获取当前工作路径和当前模块路径
    从标准输出和读入
    字符串赋值操作
    char,string和CString转换
    字符串结束标志
    Lenovo GTX960M 配置CUDA
  • 原文地址:https://www.cnblogs.com/coisini/p/9686238.html
Copyright © 2011-2022 走看看