zoukankan      html  css  js  c++  java
  • 多线程(2)

    创建线程的三种方式

    1.继承java.lang.Thread

    public class Thread01 extends Thread{//继承Thread类
    
        @Override
        public void run() {//重写Thread的run()方法
            System.out.println("do something!");
        }
    }
    public class ThreadMain {
    
        public static void main(String[] args) {
            Thread01 t1 = new Thread01();
            t1.start();//使用Thread的start方法新建线程
        }
    }

    start()_方法和run方法的区别:

    1>.start是类Thread的一个方法

    2>.run是接口Runnable的一个抽象方法,使用它需要实现

    3>.start是新建一个线程,run不会新建线程,它是顺序执行的

    2.实现java.lang.Runnable接口

    public class RunnableImpl implements Runnable{//实现Runnable接口
    
        public void run() {//实现Runnable中的run()方法
            System.out.println("do something 2.");
        }
    
    }
    public class RunnableMain {
    
        public static void main(String[] args) {
            RunnableImpl r = new RunnableImpl();
            Thread t = new Thread(r);
            t.start();//启动
        }
    
    }

    Thread类和Runable接口的区别:

    1>.类和接口的区别,单继承和实现接口,接口可扩展性强

    2>.Runnable可以处理同一共享资源

    3>.实现Runnable接口的类可以放入线程池中

    3.实现java.util.concurrent.Callable接口

    public class CallableImpl implements Callable{//实现Callable接口
    
        public Object call() throws Exception {//实现Callable接口的call()方法
            String hi = "你好";
            return hi;//有返回值
        }
    
    }
    import java.util.concurrent.Callable;
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.Future;
    
    public class CallableMain {
    
        @SuppressWarnings("unchecked")
        public static void main(String[] args) {
            Callable c = new CallableImpl();//产生结果
            //创建线程池对象
            ExecutorService pool = Executors.newSingleThreadExecutor();  
            Future future = pool.submit(c);//拿到结果
            try {
                Object returnMsg = future.get();//get()获取返回结果
                System.out.println(returnMsg.toString());
                //你好
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (ExecutionException e) {
                e.printStackTrace();
            }
        }
    }

    Callable接口的优势:

    1.有返回接口

    2.有Future对象,操作更方便

    3.可以抛异常

  • 相关阅读:
    Java编程之委托代理回调、内部类以及匿名内部类回调(闭包回调)
    JavaEE开发之记事本完整案例(SpringBoot + iOS端)
    JavaEE开发之SpringBoot整合MyBatis以及Thymeleaf模板引擎
    JavaEE开发之SpringBoot工程的创建、运行与配置
    JavaEE开发之SpringMVC中的自定义消息转换器与文件上传
    Scala.js v0.1 发布,在浏览器直接运行 Scala
    如何编写 Cloud9 JavaScript IDE 的功能扩展
    在 Cloud 9 中搭建和运行 Go
    MicroPHP 2.2.0 发布
    StrongSwan 5.1.1 发布,Linux 的 IPsec 项目
  • 原文地址:https://www.cnblogs.com/zzlcome/p/11082121.html
Copyright © 2011-2022 走看看