实训第二天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();