首页
学习
活动
专区
工具
TVP
发布

云霄雨霁

专栏作者
209
文章
238307
阅读量
42
订阅数
基础构建块
同步容器类 同步容器类包括Vector和Hashtable, 还包括JDK1.2以后添加的一些功能相似的类,这些同步的封装器类是由Collections.synchronizedXxxd等工厂方法创建的。这些类实现线程安全的方法是:将它们的状态封装起来,并对每一个公有方法都进行同步,使得每次只有一个线程能访问容器的状态。 同步容器类的问题    同步容器类都是线程安全的,但在某些情况下可能需要额外的客户端加锁来保护复合操作。容器上常见的复合操作有:迭代、跳转以及条件运算(例如“若没有则添加”)。在同步容器中
SuperHeroes
2018-05-31
5870
线程带来的问题
1、安全性问题 安全性的含义是“永远不发生糟糕的事情”。 线程安全问题主要和同步有关。在没有做好同步的情况下,多个线程中的操作顺序是不可预测的,结果的正确性无法保证。 竞态条件(Race Condition):计算的正确性取决于多个线程的交替执行时序时,就会发生竞态条件。最典型的就是“先检测后执行”,比如延迟实例化(单例模式是最典型的延迟实例化)。 2、活跃性问题 活跃性关注的是“某件正确的事情最终会发生”。当某个操作无法继续进行下去时,就会发生活跃性问题。 在串行程序中,活跃性问题的形式之一就是无限循环。
SuperHeroes
2018-05-31
4330
线程安全性
线程安全 要编写线程安全的代码,其核心在于要对状态访问操作进行管理,特别是对共享和可变状态的访问。 从非正式的意义来讲,对象的状态是指存储在状态变量(例如实例或静态域)中的数据,对象的状态可能包含其它依赖对象的域。 一个对象是否需要实现线程安全,取决于它是否会被多个线程访问。要使得对象是线程安全的,需要采取同步机制来协同对对象可变状态的访问。 Java同步机制:关键字synchronized、volatile类型的变量、显式锁(Lock)、原子变量。 无状态的对象一定是线程安全的。 原子性 竞态条件(Rac
SuperHeroes
2018-05-31
8350
设计线程安全的类
设计线程安全的类: 在设计线程安全类的过程中,需要包含以下三个基本要素: 找出构成对象状态的所有变量; 找出约束状态变量的不变性条件; 建立对象状态的并发访问管理策略。 要分析对象的状态,首先从对象的域开始。如果对象中所有的域都是基本类型的变量,那么这些域将构成对象的全部状态。如果对象的域中引用了其他对象,则该对象的域包含被引用对象的域。 同步策略定义了如何在不违背对象的不变性条件和后验条件的情况下对其状态的访问操作进行协同。同步策略规定了如何将不可变性、线程封闭与加锁机制等结合起来以维护线程的安全性
SuperHeroes
2018-05-31
8510
在现有线程安全类中添加功能
Java类库中包含许多有用的“基础模块”类。通常应该优先选择重用这些类而不是开发新类:重用能降低开发工作量、开发风险以及维护成本。很多情况这些现有的类只能提供大部分工作,我们需要在不破坏线程安全的情况下添加一些新的操作。 要添加一个新的原子操作,有以下几种方法: 第一种:修改原始的类 这种方法最简单最安全。但通常情况下无法访问或修改类的源代码。 第二种:扩展类机制(通过继承) 下面的代码中BetterVector扩展了Vector,并添加了新方法putIfAbsent。但并非所有的类都像Vector那样将状
SuperHeroes
2018-05-31
6760
网络体系结构
主要有两种体系结构:OSI-RM体系结构和TCP/IP体系结构。 OSI-RM体系结构: 七层模型: 物理层:利用传输介质为通信的网络节点之间建立、维护和释放物理连接,实现比特流透明传输; 数据链路层:在通信实体之间建立链路连接,传输以帧为单位的数据包,并实现了差错控制和流量控制方法; 网络层:为以分组为单位的数据包通过子网选择恰当路由,并实现拥塞控制、网络互连等功能; 传输层:提供端到端服务,为上层屏蔽底层数据传输问题; 会话层:建立、管理、终止会话; 表示层:数据的表示、安全、压缩; 应用层:网络服务与
SuperHeroes
2018-05-30
5770
计算题总结
作业调度算法 1、FCFS算法(先来先服务算法):算法每次从后备作业队列中选择最先进入该队列的一个或几个作业,将它们调入内存,分配必要的资源,创建进程并放入就绪队列。FCFS调度算法的特点是算法简单,但效率低;对长作业比较有利,但对短作业不利(相对SJF和高响应比);有利于CPU繁忙型作业,而不利于I/O繁忙型作业。 2、SJF算法(短作业优先算法):从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。SJF调度算法的平均等待时间、平均周转时间最少;但对长作业非常不利。 3、HRN算法(
SuperHeroes
2018-05-30
1.5K0
设计模式----单例模式
单间模式: 确保一个类只有一个实例,并提供一个全局访问点。 如果需要一个类只能创建一个对象,可以使用单件模式。 经典的单件模式实现: public class Singleton{ //利用一个私有静态变量记录该类的唯一实例 private static Singleton uniqueInstance; ... //其他变量 //构造器定义为私有,只有自Singleton类内部才能调用 private Singleton(){} //利用一个静态方法
SuperHeroes
2018-05-30
5470
Java虚拟机--类加载过程
上一篇:Java虚拟机--类加载时机 类加载的全过程包括:加载、验证、准备、解析和初始化。 加载: 在加载阶段,虚拟机需要完成3件事情: 通过一个类的全限定名来获取定义此类的二进制字节流; 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构; 在内存中生成一个代表这个类的Class对象,作为方法区这个类的各种数据的访问入口。 验证: 验证是连接阶段的第一步,这个阶段的目的是为了确保Class文件的字节流合法,并且不会威胁到虚拟机自身的安全。验证分为四个小阶段:文件格式验证、元数据验证、字节码验证、
SuperHeroes
2018-05-22
5200
Java虚拟机--垃圾收集算法和垃圾收集器
上一篇:Java虚拟机--对象回收 垃圾收集算法: 标记-清除法: 分为标记和清除两个阶段:首先标记所有需要回收的对象,在标记完成后统一回收被标记的对象。 主要不足: 效率问题:标记和清除两个过程的效率都不高; 空间问题:标记清除后会产生大量不连续的内存碎片。 复制算法: 将内存划分成大小相等的两块,每次只使用其中的一块。当这一块内存用完了,就将还存活着的对象复制到另一块上面,然后再把已使用过的那块内存一次性的清理掉。 优点:不必考虑内存碎片问题,实现简单,运行高效; 缺点:将内存缩小为了原来的一半代价太高
SuperHeroes
2018-05-22
4430
Java--线程同步&线程通信
上一篇--五态模型&控制线程 线程同步: 同步监视器(synchronized):  Java多线程引出了临界区问题。当两个进程并发修改同一资源时就有可能造成异常。Java引入同步监视器来解决这个问题。使用同步监视器有两种方法:同步代码块和同步方法。 同步代码块: synchronized(obj){ //此处代码是同步代码块 } 上述代码的obj就是同步监视器,同一时刻只能有一个线程获得同步监视器的锁定,当同步代码块执行完毕后,该线程会自动释放该同步监视器的锁定。 通常使用可能被并发访问的共享资源
SuperHeroes
2018-05-22
1K0
Java--多态性之抽象类和接口
上一篇:多态性之上溯造型和下溯造型 抽象类(abstract)可以含有一个或多个抽象方法(只有方法的定义而没有方法的实现),也可以不含有抽象方法。如果想从一个抽象类继承,而且新类要实例化对象,则必须实现抽象类的所有抽象方法。否则,新类也是抽象类。 接口(interface)可以理解为纯抽象类。它完全禁止方法的实现。接口中的数据成员(字段)默认为static和final, 成员函数(方法)默认为public。所以在实现一个接口时,来自接口的方法必须也是public。 实现按一个接口要使用 implements
SuperHeroes
2018-05-22
5120
没有更多了
社区活动
腾讯技术创作狂欢月
“码”上创作 21 天,分 10000 元奖品池!
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档