zoukankan      html  css  js  c++  java
  • 多线程-Thread、Runnable、Callbale、Future

    Thread:java使用Thread代表线程,所有的线程对象都必须是Thread类或其子类,可以通过继承Thread类来创建并启动多线程。

    package org.github.lujiango;
    
    public class Test10 {
    
        static class MyThread extends Thread {
            @Override
            public void run() {
                System.out.println("I am extend Thread...");
            }
        }
    
        public static void main(String[] args) {
            MyThread mt = new MyThread();
            mt.start();
        }
    
    }
    

      

    Runnbale:可以通过实现Runnable接口来创建多线程,创建Runnable实现类的实例,并以此作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。

    package org.github.lujiango;
    
    public class Test11 {
    
        static class MyRunnable implements Runnable {
            @Override
            public void run() {
                System.out.println("I am implement Runnable...");
            }
        }
    
        public static void main(String[] args) {
            Thread t = new Thread(new MyRunnable());
            t.start();
        }
    
    }
    

      

    Callable:从Java 5开始,Java提供了Callable接口,提供了一个call方法可以作为线程执行体,但是call方法可以有返回值,可以声明抛出异常。Java5提供了Future接口来代表call方法的返回值,并为Future提供了一个FutureTask实现类,该实现类实现了Future和Runnable。

    package org.github.lujiango;
    
    import java.util.concurrent.Callable;
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.FutureTask;
    
    public class Test12 {
    
        static class MyCallable implements Callable<String> {
            @Override
            public String call() throws Exception {
                return "my callable";
            }
        }
    
        public static void main(String[] args) throws InterruptedException, ExecutionException {
            MyCallable callable = new MyCallable();
            FutureTask<String> future = new FutureTask<String>(callable);
            new Thread(future).start();
            System.out.println(future.get());
    
        }
    
    }
    

    创建线程的三种方式比较:

    通过继承Thread类或实现Runnable,Callable接口都可以实现多线程。 
    采用Runnable,Callable接口的方式创建多线程 
    (1)线程类只是实现了Runnable接口或Callable接口,还可以继承其它类。 
    (2)多线程可以共享一个target对象,所以合适多个相同线程来处理同一份资源的情况,从而可以将CPU,代码和数据分开,形成清晰的模型,较好的体现了面向对象的思想。 
    (3)编程稍微复杂,如果需要访问当前线程,则必须使用Thread.currentThread()方法 
    采用继承Thread类的方法创建多线程 
    (1)因为多线程类已经继承了Thread类,所以不能在继承其它父类。 
    (2)编写简单,如果需要访问当前线程,则无须使用Thread.currentThread()方法,直接使用this即可获得当前线程。

     
     
  • 相关阅读:
    【马化腾如何工作】
    NOKIA格机方法
    C和C++资源
    JSP/Servlet 中的汉字编码问题
    好听力网站
    GRE单词法
    Visual Studio 2008的一些小技巧
    从键盘输入一个字符串,将其中的大写字母变小写字母,小写字母变大写字母,并输出 。
    中图文分类号 TP自动化技术、计算机技术
    保护您眼睛视力 对Win7/Vista/XP作如下设置
  • 原文地址:https://www.cnblogs.com/lujiango/p/7581003.html
Copyright © 2011-2022 走看看