摘要: sleep:Thread类中定义的方法,表示线程休眠,会自动唤醒;wait:Object中定义的方法,需要手工调用notify()或者notifyAll()方法。sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用s 阅读全文
posted @ 2018-09-30 23:50 尐鱼儿 阅读(1440) 评论(0) 推荐(0) 编辑
摘要: 主要相同点:Lock能完成synchronized所实现的所有功能 。 主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。Lock还有更强大的功能,例如,它的try 阅读全文
posted @ 2018-09-30 23:38 尐鱼儿 阅读(503) 评论(0) 推荐(0) 编辑
摘要: 分几种情况: 1.其他方法前是否加了synchronized关键字,如果没加,则能。 2.如果这个方法内部调用了wait,则可以进入其他synchronized方法。 3.如果其他个方法都加了synchronized关键字,并且内部没有调用wait,则不能。 4.如果其他方法是static,它用的同 阅读全文
posted @ 2018-09-30 23:33 尐鱼儿 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 多线程并发访问同一个对象(临界资源),如果不对线程进行同步控制,破坏了原子操作(不可再分的操作),则会造成临界资源(两个线程同时访问的资源)的数据不一致。 每一个对象都有一个互斥的锁标记和一个锁池。当线程拥有这个对象的锁标记时才能访问这个资源,没有锁标记便进入锁池,保证在同步代码块中只有一个线程,解 阅读全文
posted @ 2018-09-30 23:30 尐鱼儿 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 线程的生命周期: 1)初始状态:此时线程只是处于JVM进程中,只是创建了一个线程对象,并没有真正开始运行。 2)可动行状态:调用线程对象的start()方法,此时线程才真正的被创建,进入可运行状态,等待CPU的调度。“万事俱备,只欠CPU”。 3)运行状态:正在运行的线程,此时它拥有CPU的执行权。 阅读全文
posted @ 2018-09-30 23:29 尐鱼儿 阅读(136) 评论(0) 推荐(0) 编辑
摘要: Thread中的一些方法: currentThread() 返回对当前正在执行的线程对象的引用(实现接口方式时使用)。 sleep(long millis) 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)。 本线程不会去抢,除非sleep结束。 多个线程之间都会去抢执行权限,不会考虑优先级。 阅读全文
posted @ 2018-09-30 23:27 尐鱼儿 阅读(114) 评论(0) 推荐(0) 编辑
摘要: 进程:同一个操作系统中执行的一个子程序,包含了三部分虚拟CPU、代码、数据。 多进程:同一个操作系统中执行的多个并行的子程序。可以提高cpu的使用率。 线程:在同一个进程当中执行的子程序流。 多线程:同一个进程当中并发执行的多个子程序流。可以提高cpu的使用率。 进程与线程的区别: 进程有独立的进程 阅读全文
posted @ 2018-09-30 23:26 尐鱼儿 阅读(94) 评论(0) 推荐(0) 编辑
摘要: 写一个类,继承Thread类,覆盖Thread类中继承来的run()方法,这样就写好了自定义的线程类。 继承java.lang.Thread类: 启动线程: 写一个类,实现Runable接口,实现其中的run()方法。这种方法写好的类的对象需要作为线程类创建对象时构造方法的参数。 实现java.la 阅读全文
posted @ 2018-09-30 23:26 尐鱼儿 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 【例子1】向文件中写入字符串 查看hello.txt会看到“你好”。 当然也可以一个字节一个字节的写。 结果还是:“你好” 【例子2】向文件中追加新内容 【运行结果】: 你好Rollen 【例子3】读取文件内容 【运行结果】: 但是这个例子读取出来会有大量的空格,我们可以利用in.read(b);的 阅读全文
posted @ 2018-09-30 22:41 尐鱼儿 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 【例子1】创建一个新文件。 【运行结果】: 程序运行之后,在d盘下会有一个名字为hello.txt的文件。 【例子2】File类的两个常量 【运行结果】: 此处多说几句:我直接在windows下使用\进行分割不行吗?当然是可以的。但是在linux下就不是\了。所以,要想使得我们的代码跨平台,更加健壮 阅读全文
posted @ 2018-09-30 22:36 尐鱼儿 阅读(620) 评论(0) 推荐(0) 编辑
摘要: 字节输入流:InputStream类为所有字节输入流的父类。 三个基本的read()方法: 其它方法: 字节输出流:OutputStream类是所有字节输入流的父类。 三个基本的write()方法: 其它方法: 文件输入输出流:FileInputStream和FileOutputStream 要构造 阅读全文
posted @ 2018-09-30 22:34 尐鱼儿 阅读(163) 评论(0) 推荐(1) 编辑
摘要: 流的概念:流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样。 流的分类: 按数据方向分:输入流和输出流。 输入流:Inpu 阅读全文
posted @ 2018-09-30 22:33 尐鱼儿 阅读(981) 评论(0) 推荐(0) 编辑
摘要: 不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非sta 阅读全文
posted @ 2018-09-30 22:31 尐鱼儿 阅读(323) 评论(0) 推荐(0) 编辑
摘要: (1)前言,想要明白hashCode的作用,你必须要先知道Java中的集合。 Java中的集合(Collection)有两类,一类是List,再有一类是Set。 前者集合内的元素是有序的,元素可以重复;后者元素无序,但元素不可重复。 那么我们怎么判断两个元素是否重复呢? 这就是Object.equa 阅读全文
posted @ 2018-09-30 22:30 尐鱼儿 阅读(9831) 评论(3) 推荐(6) 编辑
摘要: ClassLoader一个经常出现又让很多人望而却步的词,本文将试图以最浅显易懂的方式来讲解 ClassLoader,希望能对不了解该机制的朋友起到一点点作用。 要深入了解ClassLoader,首先就要知道ClassLoader是用来干什么的,顾名思义,它就是用来加载Class文件到JVM,以供程 阅读全文
posted @ 2018-09-30 22:29 尐鱼儿 阅读(909) 评论(0) 推荐(0) 编辑
摘要: 调用该访问 返回一个以字符串指定类名的类的对象。 返回字节码,返回字节码的方式有几种: ①:这份字节码曾经被加载过已经存在java虚拟机中了直接返回。 ②:java虚拟机中还没有这份字节码,用类加载器去加载 把加载进来的字节码缓存在虚拟机中,以后再得到这个字节码就不用再加载。 得到字节码对应的实例对 阅读全文
posted @ 2018-09-30 22:25 尐鱼儿 阅读(315) 评论(0) 推荐(0) 编辑
摘要: 含有abstract修饰符的class即为抽象类,abstract 类不能创建的实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以 阅读全文
posted @ 2018-09-30 22:20 尐鱼儿 阅读(172) 评论(0) 推荐(0) 编辑
摘要: Overload是重载的意思,Override是覆盖的意思,也就是重写。 重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。 重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个 阅读全文
posted @ 2018-09-30 22:18 尐鱼儿 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 断言(assert):用来调试、测试代码。 格式: assert 布尔表达式: 字符串 (如果布尔表达式为false时,这个字符串才会显示)。 注意: assert默认是关闭的,使用时需要使用" -ea "进行开启," -da "是关闭,如:java -ea 类名。 断言是以异常方式去执行的,当断言 阅读全文
posted @ 2018-09-30 22:16 尐鱼儿 阅读(935) 评论(0) 推荐(0) 编辑
摘要: ==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。 如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变量也占用一块内存,例如Objet o 阅读全文
posted @ 2018-09-30 22:16 尐鱼儿 阅读(2180) 评论(0) 推荐(0) 编辑