继承runable是实现多线程
- 创建自己得到runable类继承runable接口重写run方法
用自己的runable类实例化后的对象用于用于实例化新的线程 - 话不多看代码先
继承runable接口的代码
package myrunable;
public class MyRunable implements Runnable{
private static int ii = 10;
@Override
public void run() {
while(true) {
//synchronized保证不会出现时间碎片也就是说在保证一个线程执行的情况下资源是锁死的
synchronized(this) {
if(ii>0) {
System.out.println(Thread.currentThread().getName()+"正在运行---"+ii);
ii--;
}
}
}
}
}
创建多线程
package myrunable;
public class Deno{
public static void main(String[] args) throws InterruptedException{
//先实例化一个runable对象my
//相当于实例化一个公共的资源
MyRunable my = new MyRunable();
//用runable实例化后的对象实例化新的线程
//所有新的线程共用一个资源my
Thread td1 = new Thread(my,"a");
Thread td2 = new Thread(my,"b");
Thread td3 = new Thread(my,"c");
td1.start();
td2.start();
td3.start();
}
}
-
运行结果
-
总结
上一篇讲的是继承thread类来实现多线程这篇是通过继承runable接口实现多线程
个人认为实现多线程的本质方法还是thread类
这个俩种实现方式有何不同呢
通过继承thread类实现的多线程
每个线程的资源相互没有关系
通过继承runable接口实现的多线程
所有线程公用一个资源体举个简单的例子吧
thread实现的多线程像是一条街上的许多小商贩
他们同时都在卖东西
但是各不相干,各卖各的东西
而runable实现的多线程享像是一个连锁店
他们也是都在同时卖东西
但是他们的货源是相同的,每个店消耗的都是整体的货源