JAVA多线程

 进程线程与程序

 多线程下载网络图片(需要下载apache的commons-io包2.6以上版本)

package com.company.ThreadD1;

import com.company.ThreadDemo1;
import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;
import java.net.URL;

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

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

    @Override
    public void run() {
        WebDoownload webDoownload=new WebDoownload();
        webDoownload.downloader(url,name);
        System.out.println("下载了文件"+name);
    }

    public static void main(String[] args) {
        TestThread t1=new TestThread("https://pics5.baidu.com/feed/0824ab18972bd407a5b433b6692bf4580eb309b1.jpeg?token=bfbc34d05d804fefbab372546ab90aa9","1.jpg");
        TestThread t2=new TestThread("https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2021%2F1113%2F4ce44437j00r2i1sq0016c000ed00hfg.jpg&thumbnail=650x2147483647&quality=80&type=jpg","2.jpg");
        TestThread t3=new TestThread("https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2021%2F1113%2F628645b7j00r2i1sr002cc000hs00ueg.jpg&thumbnail=650x2147483647&quality=80&type=jpg","3.jpg");

        t1.start();
        t2.start();
        t3.start();
    }
}

class WebDoownload{
    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出现问题,错误在downloader");
        }
    }
}

 继承Thread类和使用runnable接口的区别

public class ThreadDemo1 extends Thread{
    @Override
    public void run() {
        for (int i=0;i<100;i++)
        System.out.println("吃饭");
    }

    public static void main(String[] args) {
        ThreadDemo1 demo1=new ThreadDemo1();
        demo1.start();
        for (int i=0;i<1000;i++)
            System.out.println("快乐愉悦地玩手机"+i);
    }
} 

public class ThreadDemo1 implements Runnable{
    @Override
    public void run() {
        for (int i=0;i<100;i++)
        System.out.println("吃饭");
    }

    public static void main(String[] args) {
        ThreadDemo1 demo1=new ThreadDemo1();
//        Thread thread=new Thread(demo1);
//        thread.start();
        new Thread(demo1).start();
        for (int i=0;i<1000;i++)
            System.out.println("快乐愉悦地玩手机"+i);
    }
}

 龟兔赛跑代码

public class ThreadDemo1 implements Runnable{
    private String winner;
    @Override
    public void run() {
        for (int i=0;i<101;i++) {
            if(Thread.currentThread().getName()=="兔子"&&i%10==0){
                try {
                    Thread.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println(Thread.currentThread().getName()+"走了第"+i+"步");
            boolean b = isWin(i);
            if(b==true){
                break;
            }
        }
    }

    public boolean isWin(int i){
        if(winner!=null)return true;
        if(i>=100){
            System.out.println("winner is "+Thread.currentThread().getName());
            winner=Thread.currentThread().getName();
            return true;
        }
        return false;
    }
    public static void main(String[] args) {
        ThreadDemo1 demo1=new ThreadDemo1();
        new Thread(demo1,"兔子").start();
        new Thread(demo1,"乌龟").start();
    }
}

Lambda表达式

函数式编程,lambda是从匿名内部类的更进一步的简化,匿名内部类和局部内部类都是在函数中定义的类

 

package com.company.ThreadD1;

public class LambdaDemo {
//    静态内部类
    static class Like2 implements ILike{
        @Override
        public void lambda() {
            System.out.println("i like lambda2");
        }
    }

    public static void main(String[] args) {
        ILike like=new Like1();
        like.lambda();
        like =new Like2();
        like.lambda();

//        局部内部类
        class Like3 implements ILike{
            @Override
            public void lambda() {
                System.out.println("i like lambda3");
            }
        }

        like=new Like3();
        like.lambda();

//        匿名内部类,没有类的名称,必须借助接口或父类
        like=new ILike() {
            @Override
            public void lambda() {
                System.out.println("i like lambda4");
            }
        };
        like.lambda();
//          lambda表达式
        like=()->{
            System.out.println("i like lambda5");
        };
        like.lambda();
    }
}

interface ILike {
    void lambda();
}

class Like1 implements ILike{
    @Override
    public void lambda() {
        System.out.println("i like lambda1");
    }
}

 最简化版本的lambda表达式为

//          lambda表达式
        like=a-> System.out.println("i like lambda5"+a);
        like.lambda(650);

线程的五大状态:

 

 线程停止的正确做法是用stop方法控制标志符

public class StopDemo implements Runnable{
    private boolean flag=true;
    @Override
    public void run() {
        int i=0;
        while (flag){
            System.out.println("线程正在执行..."+i++);
        }
    }

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

    public static void main(String[] args) {
        StopDemo stopDemo=new StopDemo();
        new Thread(stopDemo).start();
        for(int j=0;j<1000;j++){
            System.out.println("main"+j);
            if(j==900){
                stopDemo.stop();
                System.out.println("线程被停止");
                break;
            }
        }
    }
}

sleep方法

 线程礼让:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值