• 2019.12.24 java多线程


    java实现多线程通常通过3种方法来实现:

    方法一:

      继承Thread覆写(重写)run()方法,通过调用start()方法启动线程,有一定的局限,只能继承这么一个类,不能继承别的类了

    创建MyThread继承Thread

    package com.lzw;
    
    public class MyThread extends Thread{
        //通过继承Thread类来实现多线性
    
        public MyThread(String name){
            //线程的名字
            super(name);
        }
        //重写run()方法
        public void run(){
            int i = 0;
            while(i++ < 10){
                System.out.println(Thread.currentThread().getName());
            }
        }
    }
    MyThread

    创建一个Test2类来new线程

    package com.lzw;
    
    public class Test2 {
    
        public static void main(String[] args){
            //创建多线程实例
            MyThread thread1 = new MyThread("1号");
            MyThread thread2 = new MyThread("2号");
            //启动多线程
            thread1.start();
            thread2.start();
        }
    }
    test2代码

    方法二:

      实现Runnable接口,同时重写接口中的run()方法,

      创建实现类

      使用Thread有参构造方法创建多线程,

      调用start()方法启动线程

    创建MyThread实现Runnable接口实现类

    package com.lzw;
    
    public class MyThread implements Runnable{
        //通过实现Runnable接口来实现多线性
    
        //重写run()方法
        public void run(){
            int i = 0;
            while(i++ < 10){
                System.out.println(Thread.currentThread().getName());
            }
        }
    }
    MyThread

    创建一个Test2类来new线程

    package com.lzw;
    
    public class Test2 {
    
        public static void main(String[] args){
            //创建Runnable接口实现类实例对象
            MyThread myThread = new MyThread();
            //创建线程对象,下面两个地方用的是同一个myThread
            Thread thread1 = new Thread(myThread, "1");
            thread1.start();
            Thread thread2 = new Thread(myThread, "2");
            thread2.start();
            int i = 0;
            while(i++ < 5){
                System.out.println("3");
            }
        }
    }
    Test2

    方法三

      实现Callable接口方法,这种方法还有返回值

      创建一个Callable接口的实现类,同时重写call()方法,

      new一个实现类,

      通过FutureTask线程结果处理类来封装实现类

      使用Thread有参构造方法,创建线程

      调用start()方法启动线程

    创建MyThread实现Callable接口实现类

    package com.lzw;
    
    import java.util.concurrent.Callable;
    
    public class MyThread implements Callable<Object> {
        //通过实现Callable接口来实现多线程
        //重写call()方法
        @Override
        public Object call() throws Exception {
            int i = 0;
            while(i++ < 1000){
                System.out.println(Thread.currentThread().getName());
            }
            return i;
        }
    }
    MyThread

    创建Test2来展示创建线程

    package com.lzw;
    
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.FutureTask;
    
    public class Test2 {
    
        public static void main(String[] args) throws ExecutionException, InterruptedException {
            //创建Callable接口实现类
            MyThread myThread = new MyThread();
            //使用FutureTask封装Callable接口
            FutureTask<Object> f1 = new FutureTask<>(myThread);
            //使用Thread有参构造方法,实现多线程
            Thread thread1 = new Thread(f1, "1");
            //启动多线程
            thread1.start();
            //创建另外一个多线程
            FutureTask<Object> f2 = new FutureTask<>(myThread);
            Thread thread2 = new Thread(f2, "2");
            thread2.start();
    
            //输出结果
            System.out.println(f1.get());//1001
            System.out.println(f2.get());//1001
        }
    }
    Test2
  • 相关阅读:
    【译】可扩展前端2  —  常见模式
    【译】可扩展前端1  —  架构基础
    【译】The Clean Architecture
    获取页面元素位置
    vue高价组件的使用
    gif动态图片转精灵图
    消除 transition 闪屏
    移动端 -- 如何去掉元素被触摸时产生的半透明灰色遮罩?
    解决手机移动端触屏版web页面长时间按住页面出现闪退的问题
    移动端滑动慢,卡顿
  • 原文地址:https://www.cnblogs.com/WildSky/p/11888949.html
Copyright © 2020-2023  润新知