06 2019 档案
廖雪峰Java12maven基础-2maven进阶-2模块管理
摘要:1. 把大项目拆分为模块是降低软件复杂度的有效方法 在Java项目中,我们通常会会把一个项目分拆为模块,这是为了降低软件复杂度。 例如:我们可以把一个大的项目氛围module a, module b, module c三个模块,这样我们就可以降低软件的复杂度。 maven可以有效管理多个模块 2.建 阅读全文
posted @ 2019-06-26 19:58 singleSpace 阅读(244) 评论(0) 推荐(0)
廖雪峰Java12maven基础-2maven进阶-1使用插件
摘要:1.maven的Lifecycle,Phase和Goal: 使用maven构建项目就是执行Lifecycle 执行Lifecycle就是按顺序执行一系列Phase 每执行一个Phase,都会执行该Phase绑定的若干Goal Goal是最小任务单元 2.maven通过调用不同的插件Plugin来构建 阅读全文
posted @ 2019-06-26 19:35 singleSpace 阅读(397) 评论(0) 推荐(0)
廖雪峰Java12maven基础-1maven入门-3构建流程
摘要:maven是一个Java项目管理和构建工具: 标准化项目结构 标准化构建流程(编译、打包、发布) 依赖管理 Maven的构建流程 clean 删除所有编译生成的文件 compile 编译源码、编译测试源码 test 运行测试 package 打包为jar/war maven的生命周期Lifecycl 阅读全文
posted @ 2019-06-20 22:29 singleSpace 阅读(282) 评论(0) 推荐(0)
廖雪峰Java12maven基础-1maven入门-2依赖管理
摘要:maven 如果我们的项目依赖第三方的jar包: Commons Logging发布的jar包在那里下载? 使用Log4j需要哪些jar包 其他依赖:junit,Javamail,MySQL驱动... 方法1:搜索引擎——手动下载——解压——放入classpath:过程非常繁琐 方法2:maven解 阅读全文
posted @ 2019-06-20 21:33 singleSpace 阅读(371) 评论(0) 推荐(0)
廖雪峰Java12maven基础-1maven入门-1maven介绍
摘要:1.Java项目: 1.1.首先确定引入哪些依赖包,如commons logging, log4j, selenium 1.2.确定项目的目录结构 1.3.配置环境:如JDK的版本号 1.4.编译打包流程 1.5.版本控制:当前代码的版本号 1.6.命令行恐惧:除了使用IDE进行编译外,我们还必须能 阅读全文
posted @ 2019-06-19 13:46 singleSpace 阅读(590) 评论(0) 推荐(0)
廖雪峰Java11多线程编程-4线程工具类-1ThreadLocal
摘要:1. ThreadLocal 1.1 回顾 多线程是Java实现多任务的基础: Thread:通过Thread来启动一个新的线程。Thread对象代表一个线程:调用Tread.currentThread()获取当前线程。 ExecutorService、ScheduledThreadPool、For 阅读全文
posted @ 2019-06-18 21:07 singleSpace 阅读(615) 评论(0) 推荐(0)
廖雪峰Java11多线程编程-3高级concurrent包-9Fork_Join
摘要:1. Fork/Join模式 线程池可以高效执行大量小任务: Fork/Join线程池可以执行一种特殊的任务: 把一个大任务拆成多个小任务并行执行 Fork/Join是在JDK 1.7引入的 Fork/Join模式的应用: java.util.Arrays.parallelSort(array):方 阅读全文
posted @ 2019-06-16 21:55 singleSpace 阅读(405) 评论(0) 推荐(0)
廖雪峰Java11多线程编程-3高级concurrent包-8CompletableFuture
摘要:1. 使用Future不能自动获得异步执行结果 使用Future获得异步执行结果: 但是当我们使用get()获得异步执行结果的时候,这个方法可能会阻塞。 还可以通过while循环反复调用isDone()来判断异步结果是否已经完成。 所以使用Future获得异步执行的结果有2个方法: 1.调用阻塞方法 阅读全文
posted @ 2019-06-16 15:50 singleSpace 阅读(714) 评论(1) 推荐(1)
廖雪峰Java11多线程编程-3高级concurrent包-7Future
摘要:1. Runnable接口的限制 JDK提供了ExecutorService接口表示线程池,可以通过submit提交一个任务。 但这里的task有个问题,因为继承制Runnable,如果希望返回一个结果,只能用result来表示,这样主线程获取结果,就很不方便。 因此JDK又提供了一个Callabl 阅读全文
posted @ 2019-06-13 22:37 singleSpace 阅读(285) 评论(0) 推荐(0)
廖雪峰Java11多线程编程-3高级concurrent包-6ExecutorService
摘要:1. 线程池 Java语言内置多线程支持: 创建线程需要操作系统资源(线程资源,栈空间) 频繁创建和销毁线程需要消耗大量时间 假设我们有大量的小任务,可以让它排队执行,然后在一个线程池里有少量的线程来执行大量的任务。 使用线程池来复用线程,可以非常高效的执行大量小任务。 线程池: 线程池维护若干个线 阅读全文
posted @ 2019-06-13 21:57 singleSpace 阅读(323) 评论(0) 推荐(0)
廖雪峰Java11多线程编程-3高级concurrent包-5Atomic
摘要:1. Atomic java.util.concurrent.atomic提供了一组原子类型操作。如AtomicInteger提供了 1.1 无锁线程安全 Atomic类可以实现无锁(lock free)的线程安全(thread safe)访问 原理:CAS(Compare and Set)如果At 阅读全文
posted @ 2019-06-13 19:01 singleSpace 阅读(201) 评论(0) 推荐(0)
廖雪峰Java11多线程编程-3高级concurrent包-4Concurrent集合
摘要:1. Concurrent 用ReentrantLock+Condition实现Blocking Queue。 Blocking Queue:当一个线程调用这个Queue的getTask()时,该方法内部可能让给线程变成等待状态,直到条件满足。线程被唤醒以后,getTask()才会返回。 而java 阅读全文
posted @ 2019-06-13 14:20 singleSpace 阅读(283) 评论(0) 推荐(0)
廖雪峰Java11多线程编程-3高级concurrent包-3Condition
摘要:1.Condition实现等待和唤醒线程 java.util.locks.ReentrantLock用于替代synchronized加锁 但是synchronized可以使用wait和notify实现线程在条件不满足时的等待,条件满足时的唤醒。 如何使用ReentrantLock实现wait/not 阅读全文
posted @ 2019-06-12 22:21 singleSpace 阅读(214) 评论(0) 推荐(0)
廖雪峰Java11多线程编程-3高级concurrent包-2ReadWriteLock
摘要:1.ReentrantLock的限制 ReentrantLock保证了只有一个线程可以执行临界区代码。 临界区代码:任何时候只有1个线程可以执行的代码块。 临界区指的是一个访问共用资源(例如:共用设备或是共用存储器)的程序片段,而这些共用资源又无法同时被多个线程访问的特性。当有线程进入临界区段时,其 阅读全文
posted @ 2019-06-12 20:32 singleSpace 阅读(238) 评论(0) 推荐(0)
廖雪峰Java11多线程编程-3高级concurrent包-1ReentrantLock
摘要:1.java.util.concurrent 线程同步: 是因为多线程读写竞争资源需要同步 Java语言提供了synchronized/wait/notify来实现同步 编写多线程同步很困难 所以Java提供了更高级的java.util.concurrent包: 更高级的同步功能 简化多线程程序的编 阅读全文
posted @ 2019-06-12 00:06 singleSpace 阅读(218) 评论(0) 推荐(0)
廖雪峰Java11多线程编程-2线程同步-4wait和notify
摘要:1.多线程协调 synchronized解决了多线程竞争的问题,我们可以在synchronized块中安全的对一个变量进行修改,但是它没有解决多线程协调的问题。 例如设计一个TaskQueue,内部通过LinkedList()表示一个队列。addTask()将新任务放入队列,getTask()取出队 阅读全文
posted @ 2019-06-11 19:31 singleSpace 阅读(347) 评论(0) 推荐(0)
廖雪峰Java11多线程编程-2线程同步-3死锁
摘要:在多线程编程中,要执行synchronized块,必须首先获得指定对象的锁。 1.Java的线程锁是可重入的锁 什么叫可重入的锁? 对同一个对象,同一个线程,可以多次获取它的锁,即同一把锁可以嵌套。 在add方法中,用synchronized获取了一个lock对象的锁,在synchronized代码 阅读全文
posted @ 2019-06-11 07:13 singleSpace 阅读(255) 评论(0) 推荐(0)
廖雪峰Java11多线程编程-2线程同步-2synchronized方法
摘要:1.对Java方法进行加锁 Java使用synchronized对一个对象进行加锁,也就可使用synchronized对一个方法进行加锁。 在执行synchronized语句时,我们首先获得synchronized指定的锁。当我们添加synchronized语句块的时候,首先需要注意的是锁住那个对象 阅读全文
posted @ 2019-06-11 02:45 singleSpace 阅读(235) 评论(0) 推荐(0)
廖雪峰Java11多线程编程-2线程同步-1同步代码块
摘要:1.线程安全问题 多个线程同时运行,线程调度由操作系统决定,程序本身无法决定。 如果多个线程同时读写共享变量,就可能出现问题。 假设有AddThread和DecThread,它们分别对同一个共享变量做加和减运算LOOP次,最终结果应该是0。但某些时候比如LOOP为10000时,结果是错误的。 jav 阅读全文
posted @ 2019-06-10 15:27 singleSpace 阅读(275) 评论(0) 推荐(0)
廖雪峰Java11多线程编程-1线程的概念-5中断线程
摘要:1.中断线程: 如果线程需要执行一个长时间任务,就可能需要中断线程。场景:从网络上下载一个100M的文件,用户在下载过程中中断下载任务的执行。 中断线程就是其他线程给该线程发一个信号,该线程收到信号后结束执行run()方法 1.1中断线程 需要检测isInterrupted()标志,其他线程通过调用 阅读全文
posted @ 2019-06-09 20:15 singleSpace 阅读(273) 评论(0) 推荐(0)
廖雪峰Java11多线程编程-1线程的概念-3线程的状态
摘要:1线程的状态 线程终止的的原因: run()或call()方法执行完成,线程正常结束 线程抛出一个未捕获的Exception或Error 直接调用该线程的stop()方法来结束该线程——该方法容易导致死锁,通常不推荐使用 1.1对已经死亡的线程调用start()方法使他重新启动,会引发Illegal 阅读全文
posted @ 2019-06-03 20:05 singleSpace 阅读(234) 评论(0) 推荐(0)