實訓第二天0716
上午時間
-
昨天遺留問題,開啟多線程的第三種方式:線程池
ExecutorService service = Executors.newCachedThreadPool(); //線程池,使用靜态方法建立
service.execute(()->{
//開啟一個線程
});
service.shutdown();//關閉一個線程
-
//信号量
// Semaphore semaphore =new Semaphore(2); //建立一個信号量,資源數為兩個
// semaphore.acquire(1);//占用一個資源
// semaphore.release(1);//釋放一個資源
-
//閉鎖
// CountDownLatch countDownLatch = new CountDownLatch(5000);//建立5000把鎖。
// countDownLatch.countDown();//解一把鎖
// countDownLatch.await();//線程阻塞,必須等所有的鎖都解完了,才會執行此句之後的代碼。
-
//鎖,首先要一個鎖旗标,一般建個Object對象(無意義),被鎖住的代碼一次隻有一個線程執行
//synchronized 如果放到方法中,就說明在方法開始到結束都加鎖,一次隻有一個線程執行,鎖旗标就是this對象。一般線程安全的資料結構,其内部方法全部加了synchronized
// Object lock = new Object();
// synchronized (lock){
// //執行代碼
// }
-
抽象類和接口的差別:
* 1. 單繼承 多實作
* 2. 抽象類 可以有構造方法,接口沒有構造方法,但是兩者都不能被執行個體化
* 3. 抽象類中可以有成員變量和屬性,接口中隻能有靜态常量,使用final 和static 修飾,即使不寫修飾符,也是預設靜态隻讀
* 4. 抽象類可以有抽象方法和非抽象方法,接口可以使用default來定義非抽象方法。
-
多态
* 同一個類型可以具備多種形态
*
*
* 表現形式
* 指派多态 ----- 父類引用指向子類對象
* 傳值多态 ----- 一單參數類型定義為父類,那麼所有子類對象都可以傳遞
下午時間
- 工廠模式
-
IO流
分為位元組流和字元流
位元組流是InputStream和OutputStream,字元流是Reader和Writer
File file = new File(“F:/test.txt”);
// file.createNewFile(); //建立新檔案
System.out.println(file.exists()); //傳回是否存在
// 位元組流輸出
// InputStream inputStream = new FileInputStream(file);
// byte[] content = new byte[1024];
// int count = inputStream.read(content);
// for(int i=0;i<count;i++){
// System.out.print((char)content[i]);
// }
//位元組流寫入
// OutputStream outputStream = new FileOutputStream(file);
// outputStream.write(“skjsfkj”.getBytes());
// outputStream.flush();
// outputStream.close();
//字元流寫入
// Writer writer = new FileWriter(file);
// writer.write(“你是誰啊”);
// writer.append(“cssss”);
// writer.flush();
// writer.close();
// 字元流的讀取
// Reader reader = new FileReader(file);
// char[] content = new char[1024];
// int count = reader.read(content);
// for(int i=0 ; i<count ; i++){
// System.out.print(content[i]+" ");
// }
// reader.close();