摘要: volatile在多线程中是用来同步变量的。 线程为了提高效率,将某成员变量(如A)拷贝了一份(如B),线程中对A的访问其实访问的是B。只在某些动作时才进行A和B的同步。因此存在A和B不一致的情况。 volatile就是用来避免这种情况的。volatile告诉jvm, 它所修饰的变量不保留拷贝,直接 阅读全文
posted @ 2018-10-08 08:52 秃顶程序猿 阅读(158) 评论(0) 推荐(0) 编辑
摘要: Lock是一个接口,提供了无条件的、可轮询的、定时的、可中断的锁获取操作,所有的加锁和解锁操作方法都是显示的,因而称为显示锁。 下面针对Lock的几个实现类ReentrantLock、ReentrantReadWriteLock.ReadLock和ReentrantReadWriteLock.Wri 阅读全文
posted @ 2018-10-07 16:27 秃顶程序猿 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 死锁是这样一种情形:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。 java 死锁产生的四个必要条件: 1、互斥使用,即当资源被一个线程使用(占有)时,别的线程不能使用 2、不可抢占,资源请求者不能强制从资源占有者手中夺取资源,资源只 阅读全文
posted @ 2018-10-07 16:23 秃顶程序猿 阅读(235) 评论(0) 推荐(0) 编辑
摘要: 一.为什么使用线程池: 1.降低资源损耗。 主要指的是降低创建和销毁线程时产生的cpu资源消耗,线程池通过持续工作的线程执行不断分配的新 任务,来减少频繁的线程创建与销毁。 2.提高响应速度。 3.提高线程的可管理性。 线程是稀缺资源,频繁的创建销毁,以及没有控制的大量创建,都会影响系统的稳定性。使 阅读全文
posted @ 2018-10-06 20:50 秃顶程序猿 阅读(556) 评论(0) 推荐(0) 编辑
摘要: wait():等待,如果线程执行了wait方法,那么该线程会进入等待的状态,等待状态下的线程必须要被其他线程调用notify()方法才能唤醒。 notify():唤醒,唤醒线程池等待线程其中的一个。 notifyAll():唤醒线程池所有等待线程。 wait与notify方法要注意的事项: 1. w 阅读全文
posted @ 2018-10-06 16:43 秃顶程序猿 阅读(4565) 评论(0) 推荐(0) 编辑
摘要: 1.面向对象思想的概述 面向过程:当需要实现一个功能的时候,每一个具体的步骤都要亲力亲为,详细处理每一个细节.面向过程:当需要实现一个功能的时候,不关系具体的步骤,而是找一个已经具有该功能的人,来帮我做事. 区别:面向过程:强调步骤.面向对象:强调对象. 特点:面向对象思想是一种更符合我们思考习惯的 阅读全文
posted @ 2018-07-27 15:41 秃顶程序猿 阅读(135) 评论(0) 推荐(0) 编辑
摘要: 1.求出数组中的最值: int[] array = { 5, 15, 30, 1000, 60, 20}; int max = array[0]; for(int i = 1; i < array.length; i++){ //如果当前元素,比max更大,则换 if(array[i] > max) 阅读全文
posted @ 2018-07-27 15:38 秃顶程序猿 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 1.循环概述 循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环语句,当反复执行这个循环体时,需要再合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一直执行下去, 形成死循环. 2.循环条件的基本组成部分 1).初始化语句:再循环开始最初执行,而 阅读全文
posted @ 2018-07-27 15:35 秃顶程序猿 阅读(142) 评论(0) 推荐(0) 编辑
摘要: .if选择结构 if选择结构是根据条件判断之后再做处理的一种语法结构. if(条件){ 代码块 //条件成立后要执行的代码,可以使一条语句,也可以是一组语句 } 2.if-else选择结构: 语法: if (条件){ //代码块1 }else{ 代码块2 } 3.多重if选择结构 语法: if(条件 阅读全文
posted @ 2018-07-18 18:24 秃顶程序猿 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 1.变量 计算机使用内存来记忆大脑运算时要使用的数据. 如何存储一个数据? 答:"根据数据类型为它在内存中分配一块空间,然后数据就可以放进这块空间中." 分配的空间过小会导致数据无法储存. 根据内存地址可以找到这块内存空间的位置,也就找到了存储的数据. 内存地址非常不好记,因此,我们给这块内存空间起 阅读全文
posted @ 2018-07-18 18:03 秃顶程序猿 阅读(170) 评论(0) 推荐(0) 编辑