1、清空问题,回滚?
2、如果读的文档为空,可以在catch的地方设置一个默认文档,里面有数据,输出那个文档内容
3、try...catch写在main方法里
4、在 7之前,switch 只能支持 byte、short、char、int或者其对应的封装类以及 Enum 类型。在 7中,String支持被加上了。
5、final指定的引用变量不能变,可是内容是可以变的
6、Math类中提供了三个与取整有关的方法:ceil、floor、round,这些方法的作用与它们的英文名称的含义相对应,例如,ceil的英文意义是天花板,该方法就表示向上取整,Math.ceil(11.3)的结果为12,Math.ceil(-11.3)的结果是-11;floor的英文意义是地板,该方法就表示向下取整,Math.ceil(11.6)的结果为11,Math.ceil(-11.6)的结果是-12;最难掌握的是round方法,它表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整,所以,Math.round(11.5)的结果为12,Math.round(-11.5)的结果为-11。
7、用.equals()方法的时候
8、多线程同步锁有十多种实现方法,现在学7种
9、同步锁
10、系统的流应该在本方法里就关流,而且关之前一定要判断是否非空,不然会报空指针异常,应该测试的时候按照jdk把它测试出来
11、 EOFException 是一个提示信息
12、要自己学习sorket
13、集合要做非空判断
14、创建一个子线程,写一个子线程类,继承Thread线程,具体的功能在run方法里实现
然后创建一个子线程对象,对象调用start()方法来启动子线程。每创建一个子线程对象,就新开了一个线程,每创建一个子线程对象,就新开一个线程;
15、使用继承Thread类的方法来创建线程类,多条线程之间无法共享线程类的实例变量
16、getName()是Thread的方法,如果是继承Thread类,可以直接使用getName(),如果是实现Runnable接口,则需要使用Thread.currentThread.getName()来调用getName()方法
17、通过实现Runnable接口的,只是创建一次对象,创建线程的时候是用Thread()来创建的,Thread对象执行实现接口的类里的run方法
步骤:(1)、定义Runnable接口的实现类,并重新改写接口的run方法,该run方法的方法体
同样是该线程的执行体
(2)、创建Runnable实现类的实例,并以此实例作为Thread的参数来创建Thread对象,
该Thread对象才是真正的线程对象
适合多个相同线程来处理同一份资源
18、线程中断、让步、睡眠??
19、Thread在lang包下的
20、synchronized锁的意思
21、多线程买票的工程实现的思路:设了一个Ticket的类,里面有属性张数,和一个方法:根据传进来的张数做不同的处理:如果买的张数小于总张数,线程睡眠,总张数减去买的张数,返回买的张数;如果买的张数大于总张数,返回-2;如果买的张数小于0,返回-1;如果总张数小于0,返回-3;有一个买票的子线程,里面的构造方法形参为票务类,重写的run方法就是调用ticket类里的getMoney方法的;买票的测试方法:创建ticket对象,线程休眠,创建两个子线程并开始买票,Ticket类的买票的方法上锁了,这样可以有先后顺序。
22、上锁有很多方法:(1)、给方法上锁,同时加入让线程睡眠1s的语句
(2)、synchronized(Object){}:给对象上锁,加入睡眠语句,花括号要把业务实现代码也括进去
(3)、使用重入锁实现线程同步java.util.concurrent包:
导入这个包:java.util.concurrent.locks.Lock,在需要锁的方法里调用lock.lock();外层的try包裹着睡眠语句和业务语句,try后使用finally语句关锁lock.unlock()
23、子线程类里的run方法需要上锁吗?
24、