Java的Run/Callable实现
- 
学习提示:查看JDK帮助文档 
- 
定义 MyRunnable 类实现 Runnable 接口 
- 
实现 run() 方法,编写线程执行体。 
- 
创建线程对象,调用 start() 方法启动线程。 
public class StartThread implements Runnable{
    
- 
推荐使用Runnable对象,因为Java单继承的局限性。 
package com.kuang.demo;
//创建线程方法二:实现runnable接口,重写run方法,执行线程需要丢入runnable接口的实现类,调用start方法。
public class TestThread implements Runnable{
    
小结
- 
继承Thread类 - 
子类继承Thread类就具备了多线程能力 
- 
启动线程:子类对象.start() 
- 
不建议使用,避免面向对象的单继承局限性 
 
- 
- 
实现Runnable接口 - 
实现接口Runnable具有多线程能力 
- 
启动线程:实例化目标对象 + Thread对象(目标对象).start() 
- 
推荐使用:避免单继承局限性,极为灵活,方便同一个对象被多个线程使用。 
 
- 
//一份资源
StartThread station = new StartThread();
//多个代理,给线程起别名。
new Thread(station, "小明").start();
new Thread(station, "小红").start();
new Thread(station, "小兰").start();
多个线程同时操作同一个对象
package com.kuang.demo;
//多个线程同时操作同一个对象
//买火车票的例子
//发现问题:多个线程操作同一个资源的情况下,线程不安全了,数据紊乱。
public class TestThread implements Runnable{
    //火车票数量
    private int ticktNums = 10;
    
    
- 
案例:龟兔赛跑 - 
首先来个赛道距离,然后要离终点越来越近。 
- 
判断比赛是否结束 
- 
打印出胜利者 
- 
龟兔赛跑开始 
- 
故事里是乌龟赢,兔子要睡觉,我们需要模拟兔子睡觉 
- 
最终乌龟赢得比赛 
 
- 
package com.kuang.demo;
//模拟龟兔赛跑
public class Race implements Runnable{
    //胜利者
    private static String winner;
    
    
实现callable接口(了解)
- 
实现callable接口,需要返回值类型。 
- 
重写call方法,需要抛出异常。 
- 
创建目标对象 
- 
创建执行服务:ExecutorService ser = Executors.newFixedThreadPool(1); 
- 
提交执行:Future<Boolean>result1 = ser.submit(t1); 
- 
获取结果:boolean r1 = result1.get() 
- 
关闭服务:ser.shuntdownNow(); 
package com.kuang.demo;
//线程创建方式三:实现callable接口
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.net.URL;
//线程实现方式三:实现callable接口。
/** callable的好处
 * 1、可以定义返回值
 * 2、可以抛出异常
 */
public class TestCallable implements Callable<Boolean>{
    private String url; //网络图片地址
    private String name; //保存的文件名
    
    public TestCallable(String url, String name){
        this.url = url;
        this.name = name;
    }
    
    //下载图片的线程执行体
    
 
                    
                     
                    
                 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号 
