• 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
  • 相关阅读:
    UE4分支的Git Flow
    手机Soc芯片简介
    游戏性能指标
    UE3客户端加入DS过程
    stereoscopic 3D
    UDK脚本函数性能工具
    vs2015启动崩溃,wpfgfx_v0400.dll加载D3DCompiler_47.dll失败
    UDK命令
    三维图形渲染管线
    【SpringCloud】Spring Cloud Sleuth + Zipkin 服务调用链路追踪(二十五)
  • 原文地址:https://www.cnblogs.com/WildSky/p/11888949.html
Copyright © 2020-2023  润新知