22day
实现Runnable
-
定义MyRunnable类实现Runnable接口
-
-
创建线程对象,调用starts()方法启动线程
package com.wang.lesson01;
//创建线程方式2 实现runnable接口 重写run方法 执行线程需要丢入runnable接口实现类 调用start()
public class TestThread3 implements Runnable{
public static void main(String[] args) {
//主方法 main线程
//创建runnable接口的实现类对象
TestThread3 testThread3 = new TestThread3();
//创建线程对象,通过开启线程对象来开启我们的线程,代理
//Thread thread = new Thread(testThread3);
//thread.start();
new Thread(testThread3).start();
for (int i = 0; i < 2000; i++) {
System.out.println("我在学习多线程---"+i);
}
}
package com.wang.lesson01;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.net.URL;
public class TestThread4 implements Runnable{
private String url;//网络图片地址
private String name;//网络图片保存的名字
public TestThread4(String url,String name){
this.url = url;
this.name = name;
}
小结
继承Thread类
-
子类继承Thread类具备多线程能力
-
启动线程:子类对象 start()
-
不建议使用:避免OOP单继承局限性
实现Runnable接口
-
实现接口Runnable具有多线程能力
-
启动线程:传入目标对象+Thread对象.start()
-
推荐使用:避免单继承局限性,灵活方便,方便同一个对象被多个线程使用
//一份资源
StartThread station = new StartThread();
//多个代理
new Thread(station,"小明").start();
new Thread(station,"老师").start();
new Thread(station,"小红").start();
初识并发问题
package com.wang.lesson01;
//多个线程同时操作同一个对象
//买火车票
//问题 多个线程操作同一个资源的时候不安全 数据紊乱
public class TestThread5 implements Runnable{
//票数
private int ticketNums = 10;
龟兔赛跑
package com.wang.lesson01;
import java.security.PrivateKey;
//模拟龟兔赛跑
public class Race implements Runnable{
//胜利者
private static String winner;
Callable接口
-
实现Callable接口,需要返回值类型
-
重写call方法,需要抛出异常
-
创建目标对象
-
创建执行服务:ExecutorService ser = Executors.newFixedThreadPoo(1);
-
提交执行:Future<Boolean> result1=ser.submit(t1);
-
获取结果:boolean r1 = result1.get();
-
关闭服务:ser.shutdownNow();
package com.wang.lesson02;
//线程创建方式三 实现Callable接口
import com.wang.lesson01.TestThread2;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.concurrent.*;
/*
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;
}
