zoukankan      html  css  js  c++  java
  • JAVA的多线程

    在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口,下面通过具体代码来看它们的区别

    (1)继承Thread实现多线程

    package cn.com.thread.demo;
    
    class MyThread1 extends Thread {
        private String name;
        public MyThread1(String name) {
            super();
            this.name = name;
        }
        public void run() {
            for(int i = 0; i < 100; i ++) {
                System.out.println("线程开始:"+ this.name +",i="+i);
            }
        }
    }
    
    public class ThreadDemo01 {
    
        public static void main(String[] args) {
        
            MyThread1 mt1 = new MyThread1("线程a");
            MyThread1 mt2 = new MyThread1("线程b");
            
            /*直接调用类的方法,结果是跟调用普通类的方法一样,执行完一个,再执行另一个,达不到多线程工作的效果*/
            //mt1.run();
            //mt2.run();
            
            /*用start()方法启动线程*/
            mt1.start();
            mt2.start();
            
        }
    }

    (2)实现Runnable接口产生多线程

    package cn.com.thread.demo;
    
    class MyThread2 implements Runnable {
        private String name;
        public MyThread2(String name) {
            this.name = name;
        }
        public void run() {
            for(int i = 0; i < 100; i ++) {
                System.out.println("线程开始:"+ this.name +",i="+i);
            }
        }
    }
    
    
    public class RunnableThread {
    
        public static void main(String[] args) {
            
            MyThread2 mt1 = new MyThread2("线程a");
            MyThread2 mt2 = new MyThread2("线程b");
            
            /*但是在使用Runnable定义的子类中没有start()方法,只有Thread类中才有。
             此时观察Thread类,有一个构造方法:public Thread(Runnable targer)
             此构造方法接受Runnable的子类实例,也就是说可以通过Thread类来启动Runnable实现的多线程。*/
            new Thread(mt1).start();
            new Thread(mt2).start();
            
            /*或者下面的写法*/
            /*Thread t1 = new Thread(mt1);
            Thread t2 = new Thread(mt2);
            t1.start();
            t2.start();*/
        }
    }


    (3)Thread 和Runnable 两种实现方式的区别和联系:
    在程序开发中只要是多线程肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下好处:
        避免点继承的局限,一个类可以继承多个接口。
        适合于资源的共享 
     以卖票程序为例,通过Thread类完成:

    package cn.com.thread.demo;
    
    class MyThread3 implements Runnable {
        private int ticket = 50;
        public void run() {
            for (int i = 0; i < 60; i ++) {
                if(this.ticket > 0) {
                    System.out.println("卖票:ticket" + this.ticket--);
                }
            }
        }
    }
    
    public class ThreadTicket {
        
        public static void main(String[] args) {
            
            MyThread3 mt = new MyThread3();
            
            /*在Runnable生成的线程中可以用一个实例在多个线程中调用*/
            new Thread(mt).start(); 
            new Thread(mt).start();
            new Thread(mt).start();
        }
    
    }
  • 相关阅读:
    图像 resize 代码:保留 aspect ratio(长宽比)
    Pytorch lr_scheduler 中的 last_epoch 用法
    torch.optim用法(参数组的设置)
    课程式学习(Curriculum Learning)
    扇贝单词本-隐藏中文释义 tampermonkey
    电话号码正向标记认证网站申请地址
    考研英语做题计时器网页版(每隔3分钟播放声音,提醒计时)
    mac关闭自动更新后还在每天提醒进行安装更新
    mac 自动生成自签证书脚本
    Ditto
  • 原文地址:https://www.cnblogs.com/Yogurshine/p/2840980.html
Copyright © 2011-2022 走看看