zoukankan      html  css  js  c++  java
  • Java创建线程的方式

     Java中线程的创建有四i种方式:

    1.  通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中

    2.  通过实现Runnable接口,实例化Thread类

    3、应用程序可以使用Executor框架来创建线程池

    4、实现Callable接口

    一、通过继承Thread类实现多线程

    class MyThread extends Thread{
        String name = null;
        int ticket = 0;
        public MyThread(String name){
            this.name = name;
        }
        public synchronized void run(){
            for (int i = 0; i < 5; i++) {
                System.out.println(Thread.currentThread().getName()+this.name+" ticket:"+ticket++);
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }          
            }
     
        }
    }

    实现方式:

    public class TestThread {
     
       public static void main(String args[]) {
           MyThread mThread1 = new MyThread("线程一");
           MyThread mThread2 = new MyThread("线程二");
           MyThread mThread3 = new MyThread("线程三");
           mThread1.start();
           mThread2.start();
           mThread3.start();
       }   
    }

    输出结果:

    Thread-0线程一 ticket:0
    Thread-1线程二 ticket:0
    Thread-2线程三 ticket:0
    Thread-2线程三 ticket:1
    Thread-1线程二 ticket:1
    Thread-0线程一 ticket:1
    Thread-2线程三 ticket:2
    Thread-0线程一 ticket:2
    Thread-1线程二 ticket:2
    Thread-2线程三 ticket:3
    Thread-0线程一 ticket:3
    Thread-1线程二 ticket:3
    Thread-2线程三 ticket:4
    Thread-0线程一 ticket:4
    Thread-1线程二 ticket:4

    二、通过继承Runnable接口实现多线程

    class RunThread implements Runnable{
    
        int Counter = 0;
        @Override
        public synchronized void run() {
            for(int i=0;i<5;i++){
                System.out.println(Thread.currentThread().getName()+"count:"+Counter++);
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }            
            }
        }    
    }

    实现方式:

    public class TestRunnable  {
         
           public static void main(String args[]) {
               RunThread rThread = new RunThread();
                Thread t1 = new Thread(rThread,"线程一");
                Thread t2 = new Thread(rThread,"线程二");
                Thread t3 = new Thread(rThread,"线程三");
                t1.start();
                t2.start();
                t3.start();
           }   
        }

    输出结果:

    线程一count:0
    线程一count:1
    线程一count:2
    线程一count:3
    线程一count:4
    线程二count:5
    线程二count:6
    线程二count:7
    线程二count:8
    线程二count:9
    线程三count:10
    线程三count:11
    线程三count:12
    线程三count:13
    线程三count:14

    三、总结

    实现Runnable接口相对于继承Thread类来说,有以下显著优势:

    (1)适合多个相同程序代码的线程去处理同一资源的情况(资源共享)

    (2)可以避免由于Java的单继承特性带来的局限,一个类可以继承多个接口

    (3)挣钱了程序的健壮性,代码能够被多个线程共享,代码与数据是独立的

    追梦的脚步,永不停息
  • 相关阅读:
    Keepalived+LVS-DR+Nginx高可用故障切换模式
    【keepalived】CentOS7.0下安装教程
    【Linux】时间同步设置+防火墙设置+SELinux设置
    reset.css
    webpack打包出错 连续同一个命令打包 堆栈错误
    git操作
    js如何判断一个对象{}是否为空对象,没有任何属性,为空对象的几种方法
    页面样式 窗口大小
    Angular2路由 上线后页面刷新后报404错误
    React 上传进度条问题 原生js上传 input type=“file”
  • 原文地址:https://www.cnblogs.com/liuzhenping/p/7517315.html
Copyright © 2011-2022 走看看