繼承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();
}