02.多线程

02.多线程

学习笔记

Thread

三种创建方式

继承Thread类 重写run()方法,创建线程对象,调用start()启动线程

实现Runnable接口 实现run()方法,创建实现类对象,创建线程对象

实现Callable接口

(Thread实现了Runnable接口)

例:多线程下载图片

public class TestThread1 extends Thread{
    private String url;
    private String name;

    public TestThread01(String url, String name) {
        this.url = url;
        this.name = name;
    }

    @Override
    public void run() {
        WebDownloader webDownloader=new WebDownloader();
        webDownloader.downloader(url,name);
        System.out.println("name"+name);
    }

    public static void main(String[] args) {
        TestThread1 testThread01=new TestThread1("","1.jpg");
        TestThread1 testThread02=new TestThread1("","2.jpg");
        TestThread1 testThread03=new TestThread1("","3.jpg");

        testThread01.start();
        testThread02.start();
        testThread03.start();
    }
}

实现Runnable接口

public class ThreadDemo2 implements Runnable {
    private int tickets=10;
    @Override
    public void run() {
        while (true){
            System.out.println(Thread.currentThread().getName()+tickets--);
            if (tickets<=0){
                break;
            }
        }
    }

    public static void main(String[] args) {
        ThreadDemo2 threadDemo2=new ThreadDemo2();
        new Thread(threadDemo2,"a").start();
        new Thread(threadDemo2,"b").start();
    }
}

commons-io

//下载器
class WebDownloader{
    public void downloader(String url,String name){
        try {
            FileUtils.copyURLToFile(new URL(url),new File(name));
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("IO异常,download方法出现异常");
        }
    }
}

静态代理

  • 目标对象和代理对象实现相同接口
  • 将目标对象作为参数放入代理对象的构造方法中
  • 创建代理对象的实例,并将目标对象作为构造参数传入
  • 代理对象调用实现接口的方法

λ表达式

  • 适用于一个接口中只有一个方法
//(param)->expression/statement/{statements}
new Thread(()-> System.out.println("1"));

线程的五大状态和方法

状态

thread.getstate()

Thread.State
public enum State {     
        NEW,
        RUNNABLE,
        BLOCKED,
        WAITING,
        TIMED_WAITING,
        TERMINATED;
    }

创建、运行、死亡

就绪:等待获得CPU资源

阻塞:sleep() 、wait()、同步锁定

方法

  • setPriority():更改优先级,1-10,t1.setPriority()
  • sleep():休眠,用于测试,不会释放锁,Thread.sleep(ms)
  • join():插队,等待插队的线程终止,在其他线程中使用,VIP线程.join()
  • yield():礼让 在run()方法中使用,Thread.yield()
  • interrupt():中断(不用)
  • isAlive():测试是否处于活动状态

不推荐使用JDK提供的stop()和destroy()方法,建议使用标志位来终止线程

//使用flag来停止线程
public class Threaddemo2 implements Runnable {
    private boolean flag=true;
    public static int num=10;
    @Override
    public void run() {
        while (flag){
            System.out.println(Thread.currentThread().getName());
        }
    }

    public void stop(){
        this.flag=false;
    }
}

获取系统当前时间

Date date=new Date(System.currentTimeMillis());

守护线程

Thread t1=new Thread(threadDemo4);
        t1.setDaemon(true);

线程同步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值