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