所谓的多线程就像小吃街卖铜锅米线的老板,老板就好比一个操作系统,如果5个顾客同时去买米线,那么,此时老板就会同时准备好5个铜锅,然后同时放上水、调料、米线,同时煮5个人的米线,如果逐个煮的话,那么估计煮了2个人的米线,后面3人就来找老板退款了。
官方解释:多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术
在Java中实现多线程四部曲:
(1)将需要用多线程方式执行的逻辑,写入一个runnable实现类中(run方法中);
(2)创建出这个runnable实现类的对象;
(3)利用这个runnable对象构造出n个thread线程;
(4)将这n个thread启动(thread.start());
1.多线程案例
测试类:Demo1.java
package cn.test.logan.day13; /** * 多线程测试类1 * @author QIN * */ public class Demo1 implements Runnable{ @Override public void run() { for(int i= 0;i<=2;i++) { System.out.println("Demo1中的线程-"+i+"**********"); } } }
测试类:Demo2.java
package cn.test.logan.day13; /** * 多线程测试类2 * @author QIN * */ public class Demo2 implements Runnable{ @Override public void run() { for(int i= 0;i<=5;i++) { System.out.println("Demo2中的线程"+i+"----------"); } } }
测试多线程类:ThreadDemo.java
package cn.test.logan.day13; public class ThreadDemo { public static void main(String[] args) { Demo1 demo1 = new Demo1(); Demo2 demo2 = new Demo2(); // 构造一个线程,指定要执行的逻辑 Thread thread1 = new Thread(demo1); Thread thread2 = new Thread(demo1); Thread thread3 = new Thread(demo1); Thread thread4 = new Thread(demo2); Thread thread5 = new Thread(demo2); // 将这5个线程以多线程方式启动 thread1.start(); thread2.start(); thread3.start(); thread4.start(); thread5.start(); } }
执行结果:
2.将数据传递到Runnable对象中
在实际操作中,我们有时候需要往对象中动态的传递数据,此时可以使用构造函数来完成,以下是具体的代码实现。
多线程测试代码:ThreadDem.java
package cn.test.logan.day13; public class ThreadDemo { public static void main(String[] args) { Demo1 demo1 = new Demo1("张三");Demo1 demo12 = new Demo1("李四");Demo1 demo13 = new Demo1("王五"); Demo2 demo2 = new Demo2(); // 构造一个线程,指定要执行的逻辑 Thread thread1 = new Thread(demo1); Thread thread2 = new Thread(demo12); Thread thread3 = new Thread(demo13); Thread thread4 = new Thread(demo2); Thread thread5 = new Thread(demo2); // 将这5个线程以多线程方式启动 thread1.start(); thread2.start(); thread3.start(); thread4.start(); thread5.start(); } }
测试类1:Demo1.java
package cn.test.logan.day13; /** * 多线程测试类1 * @author QIN * */ public class Demo1 implements Runnable{ private String name; public Demo1(String name) { super(); this.name = name; } @Override public void run() { for(int i= 0;i<=2;i++) { System.out.println("Demo1中的线程-"+name); } } }
测试类2:Demo2.java
package cn.test.logan.day13; /** * 多线程测试类2 * @author QIN * */ public class Demo2 implements Runnable{ @Override public void run() { for(int i= 0;i<=5;i++) { System.out.println("Demo2中的线程"+i+"----------"); } } }
测试结果: