java基础
简单点,编程的方式简单点
这个作者很懒,什么都没留下…
展开
-
生成器模式Builder理解体会
场景描述:有一个方法,要用到一个对象,我们要生成它,比如是汽车,我们要用到的汽车,它的一些属性是不止一种的,如配件等级的不同等 方式一: 因为汽车对象有这些属性的set方法,我们直接通过多句set语句,来构造出我们需要的定制对象,但有一个问题,一个是代码挺长,在一个只是要获取对象的地方而不是构造对象的地方使用了多句set来构造对象,这应该是不好的;还有是,如果其他地方的代码也要用到定制对象,则要再set一遍,重复; 方式二: Builder模式,其实就是将这些set方法封装到一个Builder类中.原创 2020-08-27 22:48:21 · 233 阅读 · 0 评论 -
双重检测锁
场景描述: 在利用缓存时,如果我们采用下面的逻辑: 1. 从缓存获取 2. 判空,若空,则查询数据库;否则直接返回 在高并发的情况下,上面可能会发生缓存穿透的问题,即刚开始有大量请求过来,由于缓存里还没有,所有这些请求就都去请求数据库,给数据库带来了压力。 解决方案: 双重检测锁,逻辑: 1. 从缓存获取 2. 判空,若空: 2.1. synchronized代码块修饰,从缓存获取 2.2. 判空,若空,则查询数据库;否则直接返回 2.1. 这一步看似有点重复,其实不然,因为当...原创 2020-06-23 23:26:54 · 315 阅读 · 0 评论 -
IO练习:对文件目录的读取
描述:对File对象的练习 import java.io.*; import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; import java.nio.charset.CharsetEncoder; import java.util.*; /** * 文件的读取,目录的递归获取的练习,该练习的效果是原创 2020-05-29 20:16:38 · 274 阅读 · 0 评论 -
网络编程--层概念个人理解
不同层有各自的职能,组合起来,就像排列组合一样,根据不同的需要组合成不同的排列,比如,同样的ip协议,有的要TCP协议长连接方式,有的要UDP方式。分成不同层,就可以满足更多不同的需求。 ...原创 2020-05-02 07:27:21 · 278 阅读 · 0 评论 -
java并发编程--get超时处理以及cancle方法的使用
#注意代码上面的注释 import java.util.concurrent.*; /** * @创建人 xiaoshi * @创建时间 2020/4/11 * @描述 练习get超时,以及cancle方法的使用。可知,在future调用处,捕捉超时异常后,可使用cancle方法 * 来对线程进行管理,将其关闭,传入的参数为:是否跑完线程,如果传入为false,那么线程将直接...原创 2020-04-11 22:18:32 · 542 阅读 · 0 评论 -
java并发编程--循环栅栏的使用
import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; /** * @创建人 xiaoshi * @创建时间 2020/4/4 * @描述 循环栅栏cyclicBarrier的练习: * 可设置一个数量,当同样数量的线程的调用了aw...原创 2020-04-04 21:08:24 · 293 阅读 · 0 评论 -
java并发编程--生产者消费者模式练习
import java.util.Date; import java.util.Queue; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.ReentrantLock; /** * @...原创 2020-04-04 16:27:10 · 278 阅读 · 0 评论 -
java并发编程--(练习)两个线程串行执行
练习:让两个线程一前一后地循环执行 这里利用Contition来实现。 注意:条件的释放需要在另外一个线程开始等待之后,否则如果是线程1先释放条件1,线程2再等待条件1,那线程2会一直等待下去 import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.ReentrantLock; /** ...原创 2020-04-04 15:53:17 · 3508 阅读 · 0 评论 -
java并发编程--CAS
CAS,即Compare And Swap,比较交换,即先比较实际值与期望值是否一致,一致的话就将新值替代旧值,且这个过程是原子的 联想到乐观锁,它也是先操作,在比较实际值与期望值是否一致,不一致则操作失败,重新尝试或者报错。 还有,Atomic包下的原子类,也有这种比较交换的思想 还有ConcurrentHashMap中,也有用到CAS算法,比如put方法中 CAS最底层的实现是一条比较...原创 2020-03-10 23:07:57 · 137 阅读 · 0 评论 -
java并发编程--原子类Atomic*
引言:简单的,我们对一个数进行加减操作,就直接加减就行了,但在多线程中,由于会发生线程安全问题,所以我们需要保证加减前后数的值跟我们想的一样。虽然可以加锁或者用synchronized关键字,但还有用原子类的方式,它将赋值前的值的判断和赋值都统一起来,原子操作,保证操作过程中不会被干扰,也就不会发生线程安全问题。 看下以下三者的代码demo:AtomicInteger原子整数,AtomicInt...原创 2020-03-10 14:08:31 · 184 阅读 · 0 评论 -
Java并发编程--锁
https://www.cnblogs.com/wuhan729/p/8601108.html原创 2020-03-05 10:24:34 · 87 阅读 · 0 评论 -
java并发之ThreadLocal
ThreadLocal的思考: 描述: 方法1:传入秒数,new一个SimpleDataFormat对象,返回时间字符串 方法2:生成两个线程,每个线程都去调用方法1来打印不同秒数的时间 结果:运行正常 进一步思考:要是1000个线程呢?用线程池,生成10线程 进一步思考:在方法1中,每次调用都会new一个SimpleDataFormat对象,浪费开销 解决方法:将S...原创 2020-03-03 15:27:07 · 170 阅读 · 0 评论 -
java并发之线程池
1.并行 大概理解 主要要学的内容: 1. 并发安全的措施采取,如加锁等 2. 线程的管理,设计线程池等 3. 线程之间的协作,如线程返回结果 2. 线程池 线程池适合应用的场景: 1. 服务器接收的大量请求的处理 ...原创 2020-03-03 15:19:50 · 98 阅读 · 0 评论 -
抽象类
1. 为子类规定了必须实现的方法定义,包括空实现,这样就保证了子类有相同的方法。 2. 提供额外的方法给子类,一般是通用的方法或者是在上面抽象方法的基础上封装出的通用的方法,这样,因子类对于抽象方法的实现不同,而导致这些额外的方法的实现效果也不同。 如:在InputStream抽象类中,提供了read()抽象方法,同时也实现了read(byte b[])等方法。 ...原创 2020-01-18 08:48:40 · 205 阅读 · 0 评论 -
Java注解的使用
1. 基本概念 注解,可定义在类上、方法上或变量上,来扩展注解对象的描述信息,就像打了符号般,以后在对这些信息进行解析时,有了这些注解,就可以做出判断并采取相应的解析过程。如有@Override注解的方法就需要在接口中或父类中存在,否则则报错;有@Autowire注解的,spring 框架就尝试去注入相应的对象。有了这些注解,我们就可以更灵活地处理代码。 1.1 注解的使用定义 ...原创 2020-01-11 09:10:36 · 188 阅读 · 0 评论