zoukankan      html  css  js  c++  java
  • java的多线程学习,第一记

    实现多线程有三种方法

    1,继承THread类

    import com.sun.org.apache.xpath.internal.SourceTree;
    
    public class test{
    
        //继承Thread类并重写run方法
        public static class MyThread extends Thread{
            @Override
            public void run(){
                System.out.println("I am a child thread");
            }
        }
    
        public static void main(String[] args) {
            //创建线程
            MyThread thread = new MyThread();
            //启动线程
            thread.start();
        }
    
    
    }

    2,实现Runable接口

    public class test1{
    
        public static class RunableTask implements Runnable{
            private String param;
    
            @Override
            public void run(){
                System.out.println(param+"I am a child thread");
            }
    
            public RunableTask(String param){
                this.param = param;
            }
    
            
        }
    
        public static void main(String[] args) {
            RunableTask task1 = new RunableTask("21312");
            RunableTask task2 = new RunableTask("123123123");
            new Thread(task1).start();
            new Thread(task2).start();
        }
    
       
    
    }
     

    3,使用FutrueTask方法

    import java.util.concurrent.Callable;
    import java.util.concurrent.FutureTask;
    
    public class test2{
        
    
        public static class CallerTask implements Callable<String>{
    
            @Override
            public String call()throws Exception{
                return "hello";
            }
        }
    
        public static void main(String[] args) {
            //create asynchronous task
            FutureTask<String> futureTask = new FutureTask<>(new CallerTask());
            //start thread
            new Thread(futureTask).start();
            try {
                //wait task excute 
                String result = futureTask.get();
                System.out.println(result);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

     三种方式的对比优劣:

    使用继承方式的好处是,在run()方法内获取当前线程直接使用this就可以了,无须使用Thread.currentThread()方法,不好的地方是Java不支持多线程,如果继承了Thread类,

    那么就不能继承其他类了。另外任务与代码没有分离,当多个线程执行一样的任务时需

    要多份任务代码,而Runable接口则没有这个限制。

    如上面代码所示,两个线程共用一个task代码逻辑,如果需要,可以给RunableTask添加参数

    进行任务区分。但是上面两种方式都有一个缺点,就是任务没有返回值。用FutureTask方式是有返回值的

  • 相关阅读:
    java fork/join简单实践
    java 中的字符串处理--正则表达式
    那些年,我们追过的java8
    openssl与java(读取加密码的密钥)
    SpringMVC 常用注解的使用和解释
    Spring 常用注解的使用
    java web 一次请求编码设置的过程
    Spring让程序生成程序
    设置session超时的三种方式
    为什么 cookie.getMaxAge() 总是得到 -1 ?
  • 原文地址:https://www.cnblogs.com/fuckingPangzi/p/10033526.html
Copyright © 2011-2022 走看看