1. 程式人生 > 其它 >java基礎之靜態代理模式、Lamda表示式以及執行緒的睡眠

java基礎之靜態代理模式、Lamda表示式以及執行緒的睡眠

靜態代理模式

1、真實物件和代理物件都需要使用同一介面

2、代理物件要代理真實物件

代理物件可以做真實物件做不了的東西;

真實物件可以專注於自己的東西;

public class Testc {
public static void main(String[] args) {
company company = new company(new de());
company.marr();

}

}

interface marry{
void marr();
}

class de implements marry{
@Override
public void marr() {
System.out.println("好耶!!");
}
}
class company implements marry{
private marry hi;

public company(marry hi) {
this.hi = hi;
}

@Override
public void marr() {
before();
this.hi.marr();
after();


}

private void after() {
System.out.println("結婚之後");
}

private void before() {
System.out.println("結婚之前");
}
}

Lamda表示式

意義:避免匿名內部定義過多;

實質屬於函數語言程式設計;

任何介面,只包含唯一一個抽象方法的就是函式式介面—可以用Lamda表示式

    fine m=null;

m = (a) -> {
System.out.println("Lamda!" + a);
};
m.good(6);

//去掉括號,引數只能有一個才能去掉括號
m = a -> {
System.out.println("Lamda!" + a);
};
m.good(6);

//去掉花括號 (只能有一行程式碼,否則程式碼塊)
m=a-> System.out.println("Lamda!!!!"+a);
m.good(90);



interface fine{
void good(int a);
} //介面

更加的簡單;

多個引數也可以去掉引數型別,但是要去掉都去掉,必須加上括號;

執行緒的停止

建議是讓執行緒自己正常停止,不建議死迴圈;

建議使用標誌位,自己設定一個標誌位;

不要使用Stop,destory等方法;

public class Threadstop implements Runnable {
private boolean flag=true;
@Override
public void run() {
int i=0;
while (flag){
System.out.println("執行緒..."+i++);
}
}
//執行緒的標誌位
public void stop(){
flag=false;
}

public static void main(String[] args) {
Threadstop t1 = new Threadstop();
new Thread(t1).start();
for (int i = 0; i < 500; i++) {
System.out.println(i);
if (i==250){
t1.stop();
System.out.println("執行緒停止!");
}
}
}
}

執行緒和主函式一直都在執行,在250 的時候,啟動了Stop標誌位,執行緒停止,而主函式繼續跑完。

執行緒休眠

sleep的1000=1秒;

異常為InterruptedException;

Sleep可以模擬網路延遲,倒計時等

每一個物件都有一個鎖,sleep不會釋放鎖;

倒計時:

package Stop;

public class Testsleep {
public static void tendown() throws InterruptedException {
int num=10;
while (true){
Thread.sleep(1000);
System.out.println(num--);
if(num<=0){
break;
}
}
}

public static void main(String[] args) {
try {
tendown();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

列印系統當前時間:

package Stop;

import java.text.SimpleDateFormat;
import java.util.Date;


public class Nowtime {
public static void main(String[] args) {
Date nowdata = new Date(System.currentTimeMillis());
while (true) {
try {
Thread.sleep(1000);
System.out.println(new SimpleDateFormat("HH:mm:ss").format(nowdata));
nowdata = new Date(System.currentTimeMillis());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}