继承Thread类
public class TestThread1 extends Thread{
@Override
public void run() {
//run方法线程体
for (int i = 0; i < 20; i++) {
System.out.println("我在看代码"+i);
}
}
public static void main(String[] args) {
TestThread1 testThread1 = new TestThread1();
testThread1.start();
for (int i = 0; i < 200; i++) {
System.out.println("学习多线程"+i);
}
}
}
实现Runnable接口
public class TestThread3 implements Runnable {
private int keeps = 1000;
private static String winner;
@Override
public void run() {
for (int i = 0; i <= keeps; i++) {
if (Thread.currentThread().getName().equals("兔子")&& i % 100 == 0){
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
System.out.println("sleep异常");
}
}
boolean flag = getover(i);
if (flag){
break;
}
System.out.println(Thread.currentThread().getName()+"跑了"+i+"米");
}
}
private boolean getover(int steps){
if(winner!=null){
return true;
}else {
if (steps>=keeps){
winner = Thread.currentThread().getName();
System.out.println("winner is"+winner);
return true;
}
}
return false;
}
public static void main(String[] args) {
TestThread3 testThread3 = new TestThread3();
new Thread(testThread3,"兔子").start();
new Thread(testThread3,"乌龟").start();
}
}
实现Callable接口
public class TestCallable implements Callable<Boolean> {
private String url;
private String name;
public TestCallable(String url,String name){
this.url = url;
this.name = name;
}
@Override
public Boolean call() {
WebDownloader webDownloader = new WebDownloader();
webDownloader.downloader(url,name);
System.out.println("下载了"+name);
return true;
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
TestCallable t1 = new TestCallable("https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fup.enterdesk.com%2Fedpic%2Fdc%2Fd2%2Fe3%2Fdcd2e350f4fcae5d336b04756417c6dd.jpg&refer=http%3A%2F%2Fup.enterdesk.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1638586630&t=0b7741b43b914858e2224f6ed0490ccf","1.jpg");
TestCallable t2 = new TestCallable("https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic.veryhuo.com%2Fupload%2F20201229%2Fb7c63d0876d7ddab0cd11f5845804269.jpg&refer=http%3A%2F%2Fpic.veryhuo.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1638586630&t=9d81ed2efdc7798d43cee262a888cbe6","2.jpg");
TestCallable t3 = new TestCallable("https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fup.enterdesk.com%2Fedpic_360_360%2F55%2F6b%2F77%2F556b7738c6617debe1ee38cd573cab81.jpg&refer=http%3A%2F%2Fup.enterdesk.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1638586630&t=e64e27cde02b76c37c907bd3f6d85a1d","3.jpg");
ExecutorService ser = Executors.newFixedThreadPool(3);
Future<Boolean> r1 = ser.submit(t1);
Future<Boolean> r2 = ser.submit(t2);
Future<Boolean> r3 = ser.submit(t3);
boolean rs1 = r1.get();
boolean rs2 = r2.get();
boolean rs3 = r3.get();
System.out.println(rs1);
System.out.println(rs2);
System.out.println(rs3);
ser.shutdownNow();
}
}
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("异常");
}
}
}
lambda表达式
public class TestLambda {
//静态内部类
static class Like2 implements Ilike{
@Override
public void lambda() {
System.out.println("I am lambda2");
}
}
public static void main(String[] args) {
Ilike like = new Like();
like.lambda();
like = new Like2();
like.lambda();
//局部内部类
class Like3 implements Ilike{
@Override
public void lambda() {
System.out.println("I am lambda3");
}
}
like = new Like3();
like.lambda();
//匿名内部类 没有类的名称,必须借助接口或父类
like = new Ilike() {
@Override
public void lambda(){
System.out.println("I am lambda4");
}
};
like.lambda();
//用lambda简化
like = ()->{
System.out.println("I am lambda5");
};
//总结:
//lambda表达式只有一行代码的情况下才能简化成为一行,如果有多行,那么就用代码块包裹。
//前提是接口为函数式接口
//多个参数也可以去掉参数类型,要去掉就都去掉,必须加上括号
like.lambda();
}
}
//定义一个函数式接口
interface Ilike{
void lambda();
}