摘要: package com.companyname.common.test; import java.io.File; import java.io.IOException; /** * @author shusheng * @description * @Email shusheng@yiji.com * @date 2018/10/12 17:27 */ public class ... 阅读全文
posted @ 2018-10-15 23:49 书丶生 阅读(358) 评论(0) 推荐(0) 编辑
摘要: package com.companyname.common.test; import java.io.File; import java.io.IOException; /** * @author shusheng * @description * @Email shusheng@yiji.com * @date 2018/10/12 16:29 */ public class ... 阅读全文
posted @ 2018-10-15 23:47 书丶生 阅读(4585) 评论(0) 推荐(0) 编辑
摘要: package com.companyname.common.test; import java.io.File; /** * @author shusheng * @description * @Email shusheng@yiji.com * @date 2018/10/12 14:22 */ public class FileDemo1 { /** * F... 阅读全文
posted @ 2018-10-15 23:45 书丶生 阅读(334) 评论(0) 推荐(0) 编辑
摘要: package com.test; /** * @author shusheng * @description * @Email shusheng@yiji.com * @date 2018/10/10 21:15 * * java不可能对所有的情况都考虑到,所以,在实际的开发中,我们可能需要自己定义异常。 * 而我们自己随意的写一个类,是不能作为异常类来看的,要想你的类是一个... 阅读全文
posted @ 2018-10-10 21:29 书丶生 阅读(146) 评论(0) 推荐(0) 编辑
摘要: finally 的特点 被 finally 控制的语句体一定会执行 特殊情况:在执行到 finally 之前 jvm 退出了(比如 System.exit(0)) finally 的作用 用于释放资源,在 IO 流操作和数据库操作中会见到 final,finally 和 finalize 的区别: final:最终的意思,可以修饰类,成员变量,成员方法 修饰类,... 阅读全文
posted @ 2018-10-10 20:26 书丶生 阅读(233) 评论(0) 推荐(0) 编辑
摘要: 原则:如果该功能内部可以将问题处理,用 try,如果处理不了,交由调用者处理,这是用 throws 区别: 当前程序需要继续运行就 try 当前程序不需要继续运行就throws 举例: 感冒了就自己吃点药就好了,try 吃了好几天药都没好,结果得了 H7N9,那就得throws到医院去对人进行治疗 如果医院没有特效药,就变成 Error 了 阅读全文
posted @ 2018-10-10 16:03 书丶生 阅读(3673) 评论(0) 推荐(1) 编辑
摘要: package com.test; /** * @author shusheng * @description * @Email shusheng@yiji.com * @date 2018/10/10 14:24 */ public class ExceptionDemo5 { /**throws 和 throw 的区别 * throws 用在方法... 阅读全文
posted @ 2018-10-10 15:56 书丶生 阅读(342) 评论(0) 推荐(0) 编辑
摘要: package com.test; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * @author shusheng * @description * @Email shusheng@yiji.com * @date 2018/10/10 ... 阅读全文
posted @ 2018-10-10 15:54 书丶生 阅读(260) 评论(0) 推荐(0) 编辑
摘要: package com.test; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * @author shusheng * @description * @Email shusheng@yiji.com * @date 2018/10/10 ... 阅读全文
posted @ 2018-10-10 14:22 书丶生 阅读(254) 评论(0) 推荐(0) 编辑
摘要: package com.test; /** * @author shusheng * @description * @Email shusheng@yiji.com * @date 2018/10/10 10:47 */ public class ExceptionDemo2 { /** *JDK7出现了一个新的异常处理方案: *try{ *}c... 阅读全文
posted @ 2018-10-10 13:49 书丶生 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 多个异常的处理 a:每一个写一个try...catch b:写一个try,多个catch try{ ... }catch(异常类名 变量名) { ... } catch(异常类名 变量名) { ... } ... 注意事项: 1:能明确的尽量明确,不要用大的来处理。 2:平级关系的异常谁前谁后无所谓 阅读全文
posted @ 2018-10-10 11:46 书丶生 阅读(128) 评论(0) 推荐(0) 编辑
摘要: 如果程序出现了问题,我们没有做任何处理,最终jvm会做出默认的处理。把异常的名称,原因及出现的问题等信息输出在控制台。同时会结束程序。 运行结果: 阅读全文
posted @ 2018-10-09 16:12 书丶生 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 在 Java 中,所有的异常都有一个共同的祖先 Throwable类(可抛出)。Throwable 指定代码中,可用异常传播机制,通过 Java 应用程序传输的任何问题的共性。 Throwable: 有两个重要的子类:Exception(异常)和 Error(错误),二者都是 Java 异常处理的重 阅读全文
posted @ 2018-09-26 22:17 书丶生 阅读(237) 评论(0) 推荐(0) 编辑
摘要: new Thread(){代码…}.start(); new Thread(new Runnable(){代码…}).start(); 例子1: 匿名内部类的格式: new 类名或者接口名() { 重写方法; }; 本质:是该类或者接口的子类对象。 执行结果: 阅读全文
posted @ 2018-09-03 00:18 书丶生 阅读(386) 评论(0) 推荐(0) 编辑
摘要: 多线程实现的方式三: A:创建一个线程池对象,控制要创建几个线程对象。 public static ExecutorService newFixedThreadPool(int nThreads) B:做一个类实现Callable接口。 C:调用如下方法即可 Future<?> submit(Run 阅读全文
posted @ 2018-09-02 23:59 书丶生 阅读(578) 评论(0) 推荐(0) 编辑
摘要: 程序启动一个新线程成本是比较高的,因为它涉及到要与操作系统进行交互。而使用线 程池可以很好的提高性能,尤其是当程序中要创建大量生存期很短的线程时,更应该考虑使 用线程池。 线程池里的每一个线程代码结束后,并不会死亡,而是再次回到线程池中成为空闲状态, 等待下一个对象来使用。 在JDK5 之前,我们必 阅读全文
posted @ 2018-09-02 22:37 书丶生 阅读(125) 评论(0) 推荐(0) 编辑
摘要: Java 中使用ThreadGroup 来表示线程组,它可以对一批线程进行分类管理,Java 允许程 序直接对线程组进行控制。 默认情况下,所有的线程都属于主线程组。 我们也可以给线程设置分组:对一个线程组进行操作,如将一个线程组设置为守护线程,获取线程组的最大优先级等。 阅读全文
posted @ 2018-09-02 21:08 书丶生 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 阅读全文
posted @ 2018-09-02 18:53 书丶生 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 在线程安全解决之后,还是一样存在着如下的问题: A:如果消费者先抢到CPU的执行权,就会去消费数据,但是现在的数据是默认值,没有意义,应该等着数据有意义,再消费。 B:如果生产者先抢到CPU的执行权,就会去生产数据,但是呢,它生产完数据后,还继续拥有执行权,它又继续产生数据。这是有问题的,它应该等着 阅读全文
posted @ 2018-09-02 18:48 书丶生 阅读(282) 评论(0) 推荐(0) 编辑
摘要: 针对同一个资源的操作有不同种类的线程:生产线程和消费线程 执行结果: 分析: 资源类:Student 设置学生数据:SetThread(生产者) 获取学生数据:GetThread(消费者) 测试类:StudentTest 问题一:执行测试类,发现输出结果是null 0 原因:我们在每个线程中都创建了 阅读全文
posted @ 2018-09-02 01:38 书丶生 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 同步弊端: 1.效率低(可接受) 2.如果出现了同步嵌套,有可能产生死锁问题(不可接受) 死锁问题: 是指两个或者两个以上的线程在执行的过程中,因争夺资源产生的一种互相等待的现象 阅读全文
posted @ 2018-09-01 16:16 书丶生 阅读(135) 评论(0) 推荐(0) 编辑
摘要: 虽然我们可以理解同步代码块和同步方法的锁对象问题,但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁. 为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象Lock,而ReentrantLock是Lock的实现类. 阅读全文
posted @ 2018-09-01 15:12 书丶生 阅读(1329) 评论(0) 推荐(0) 编辑
摘要: 同步方法:就是把同步关键字加到方法上 同步方法的锁对象是什么呢?this(不信可以试试把下面的this换成其它对象) 如果是同步静态方法,那么锁对象就不是this了,而是类的class文件。 阅读全文
posted @ 2018-09-01 01:33 书丶生 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 为什么会出现线程安全的问题?(拿来判断是否有线程安全问题的标准) 1.是否是多线程环境 2.是否有共享数据 3.是否有多条语句操作共享数据 如何解决线程安全问题? 让程序运行在线程安全的环境中 怎么实现? 1.共享数据只造一个 2.把多个语句操作共享数据的代码给锁起来,让任意时刻只能有一个线程执行即 阅读全文
posted @ 2018-08-31 16:19 书丶生 阅读(463) 评论(0) 推荐(0) 编辑
摘要: 我们来用最经典的卖票的案例,表明两种实现方式的区别,同时分析线程不安全产生的原因 一、继承Thread类 二、实现Runnable接口 启动线程 可以看到,二者的主要区别是: 1.实现Runnable接口的方式可以避免由于JAVA单继承带来局限性 2.实现Runnable接口的方式,适用多个相同程序 阅读全文
posted @ 2018-08-31 15:02 书丶生 阅读(1346) 评论(0) 推荐(0) 编辑