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

来源:互联网 发布:线稿 知乎 编辑:程序博客网 时间:2024/05/16 09:57

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基础入门 传智博客高教产品研发部 

本人郑重声明,本博客所著文章、图片版权归权利人持有,本博只做学习交流分享所用,不做任何商业用途。访问者可將本博提供的內容或服务用于个人学习、研究或欣赏,不得用于商业使用。同時,访问者应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人的合法权利;如果用于商业用途,须征得相关权利人的书面授权。若以上文章、图片的原作者不愿意在此展示內容,请及时通知在下,將及时予以刪除。
原创粉丝点击