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();
            }
        }
    }
  • 相关阅读:
    ASP.NET页面打印技术的总结
    js传递中文参数的url到asp(jscript)解释得到的中文参数为乱码的解决方法
    header的用法(PHP)
    oracle 11g road(/dev/shm需注意)
    mysql 主从同步 Error 'Out of range value for column的问题
    linux shell 过滤特殊字符开始的行
    Oracle穿越incarnation恢复数据
    多普达A6388刷机2.3
    【忽悠普通人用】隐藏文件夹的方法
    电脑同时使用双网卡实现方法
  • 原文地址:https://www.cnblogs.com/hunterCecil/p/6076545.html
Copyright © 2011-2022 走看看