java多线程---Thread和Runnable简单实例

1.简单的实例

1.1通过Thread类创建多线程简单实例
package com.example;

public class MyThreadTest {
    public static void main (String [] args){

        MyThread myThread = new MyThread(); //创建一个线程对象
        myThread.start();//开启线程
        while (true) {

            System.out.println("在main方法里面运行```");
        }
    }

}

class MyThread extends  Thread{
    public void run(){

        while (true){      //用过死循环打印输出

            System.out.println("在Thread中运行`````");
        }
    }

}
1.2.通过Runnable接口创建多线程简单实例
package com.example;

public class MyRunnableTest {
    public static void main(String [] args){

         MyThread myThread = new MyThread(); //创建myThread的实例对象
        Thread thread = new Thread(myThread);//创建线程对象
        thread.start();//开启线程,执行线程的run()方法
        while(true){

            System.out.println("main方法里面运行");
        }
    }
}

class MyThread implements  Runnable{
    public void run(){  //线程的代码,调用start()时,线程从此处开始执行
        while(true){

            System.out.println("MyThread中运行");
        }


    }

}

2.Thread和Runnable之间的对比(以卖票为例)

2.1 Thread 
package com.example;

import sun.security.krb5.internal.Ticket;

public class MyThreadTickerSell {
    public static void main(String [] args){
    new TicketWindow().start(); //创建一个线程对象TicketWindow并开启
        new TicketWindow().start(); //创建一个线程对象TicketWindow并开启
        new TicketWindow().start(); //创建一个线程对象TicketWindow并开启
        new TicketWindow().start(); //创建一个线程对象TicketWindow并开启
    }
}


class TicketWindow extends Thread{
    private int ticket = 100;
    public void run() {
        while (true){

            if(ticket>0){
                Thread th = Thread.currentThread(); //获取当前线程
                String th_name = th.getName();//获取当前的线程的名字
                System.out.println(th_name+"正在发售第:"+ticket--+"张票");
            }
        }
    }

}

运行结果:
Thread-0正在发售第:100张票
Thread-0正在发售第:99张票
Thread-0正在发售第:97张票
Thread-1正在发售第:98张票
Thread-0正在发售第:92张票
Thread-0正在发售第:91张票
Thread-0正在发售第:76张票
Thread-3正在发售第:95张票
Thread-1正在发售第:91张票
```

2.2 Runnable
package com.example;

public class MyRunnableTest {
    public static void main (String [] args){
     TicketWindow tw = new TicketWindow();//创建TicketWindow实例化对象
        new Thread(tw,"窗口1").start();//创建线程对象并且命名窗口1,开启线程
        new Thread(tw,"窗口2").start();//创建线程对象并且命名窗口2,开启线程
        new Thread(tw,"窗口3").start();//创建线程对象并且命名窗口3,开启线程
        new Thread(tw,"窗口4").start();//创建线程对象并且命名窗口4,开启线程
    }
}

class TicketWindow implements  Runnable{
    private int ticket=100;
    public void run(){
        while (true){
            if(ticket>0){
                Thread th = Thread.currentThread();//获取当前线程
                String th_name = th.getName();//获取当前线程的名字
                System.out.println(th_name+"正在发售第:"+ticket--+"张票");
            }
        }

    }

}

输出:
窗口1正在发售第:100张票
窗口1正在发售第:99张票
窗口2正在发售第:98张票
窗口3正在发售第:97张票
窗口4正在发售第:96张票
窗口4正在发售第:95张票
窗口2正在发售第:94张票
窗口1正在发售第:93张票
窗口1正在发售第:92张票
窗口1正在发售第:91张票
窗口1正在发售第:90张票
窗口1正在发售第:89张票
窗口3正在发售第:88张票
窗口1正在发售第:87张票
窗口1正在发售第:86张票

由此我们可以看到他们的执行方式如图:
这里写图片描述

Thread 是多个线程分别完成自己的任务,
Runnable是多个线程共同完成一个任务。

参考文档:
Java基础入门 传智博客高教产品研发部 

本人郑重声明,本博客所著文章、图片版权归权利人持有,本博只做学习交流分享所用,不做任何商业用途。访问者可將本博提供的內容或服务用于个人学习、研究或欣赏,不得用于商业使用。同時,访问者应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人的合法权利;如果用于商业用途,须征得相关权利人的书面授权。若以上文章、图片的原作者不愿意在此展示內容,请及时通知在下,將及时予以刪除。
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页