zoukankan      html  css  js  c++  java
  • 创建线程的三种方法

    1. Thread
    (1) run()方法编写执行代码
    (2) start() 启动线程
    (3) 通过创建Thread子类的实例创建线程对象
    (4) 实例如下:

    public class ThreadTest extends Thread{
        public void run(){
            System.out.println("ThreadTest run name:"+ getName());
        }
    
        public static void main(String[] args) {
            for(int i=0;i<10;i++){
                new ThreadTest().start();
            }
        }
    }

    2. Runnable
    (1) run()方法编写执行代码
    (2) start() 启动线程
    (3) 先创建 Runnable实现类的实例,并依此作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象
    (4) 实例如下:

    public class RunnableTest implements Runnable {
        @Override
        public void run() {
            System.out.println("Runnable Test name "+Thread.currentThread().getName());
        }
    
        public static void main(String[] args) {
            for(int i=0; i<10; i++){
                RunnableTest rt = new RunnableTest();
                new Thread(rt,"线程编号"+i).start();
            }
        }
    }

    3. Callable
    (1) call()方法编写执行代码;
    (2) 先创建Callable实现类的实例,再使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值。
    (3) 使用FutureTask对象作为Thread对象的target创建并启动新线程,调用FutureTask对象的get()方法来获得子线程执行结束后的返回值
    (4) 实例如下:

    public class CallableTest implements Callable<Void> {
        @Override
        public Integer call() throws Exception {
        	int i=0;
        	for(;i<10;i++){
           	 System.out.println("Callable Test name "+ Thread.currentThread().getName()+i);
        	}
        	return i;
    }
    
    
        public static void main(String[] args) {
            CallableTest ct = new CallableTest();
            FutureTask ft = new FutureTask(ct);
    
            for(int i=0;i<10;i++){
                new Thread(ft,"线程编号 "+i).start();
            }
            try {
                System.out.println("线程返回值: "+ft.get());
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (ExecutionException e) {
                e.printStackTrace();
            }
        }
    }
  • 相关阅读:
    .Net Intelligencia.UrlRewriter 重定向参数中文支持配置方法
    Debian 9 vsftpd: version 3.0.3 配置
    Debian 静态网络配置
    iptables常用配置
    Debian防御DDOS(简易版本)
    Debian9+PHP7+MySQL+Apache2配置Thinkphp运行环境LAMP
    Discuz3.3注册程序修改添加记录推荐人账号
    .NetCore WPF 指定一个相对路径的图片,报错“找不到资源”
    C语言的unsigned做双目运算符的奇怪问题
    关于人脸识别的视频图片处理
  • 原文地址:https://www.cnblogs.com/hunterCecil/p/6076545.html
Copyright © 2011-2022 走看看