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










