进程线程与程序
多线程下载网络图片(需要下载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方法
线程礼让: