`
luccs624061082
  • 浏览: 84477 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论
文章列表
  线程经常需要协调它们的活动,最常用的协调方法是保护块。这样的块是以轮询一个条件开始,这个条件值必须是true,在块处理前。为了正确做到这样,有大量的步骤需要遵守。   例如,guardedJoy 是一个方法,直到一个共享变量joy被另外一个线程设置了才会执行。这样的方法,理论上,简单的循环直到条件满足,但是了这样的循环是耗费的,因为它不断地在等待中执行。   public void guardedJoy() {     // Simple loop guard. Wastes     // processor time. Don't do this!     while(!joy) {} ...
   并发应用程序及时执行的能力被叫做它的活性。这块描述了最普通的活性问题,死锁(deadlock),接着简单描述了两个其他活性问题“饥饿锁和活锁”; 死锁 死锁描述了一种情形,两个或者更多的线程徐翔阻塞。,互相等待对方。这里是一个例子。 Alphonse和Gaston是好朋友,非常看重礼节。礼节的一个严格规定是当你向一个朋友鞠躬的时候,你必须保持鞠躬状态知道你的朋友向你鞠躬。不幸的是,这中规定没有考虑到这种可能性两个朋友同时向对方鞠躬。这个应用例子,死锁,模拟了这种可能。    public class Deadlock {     static class Friend {      ...
   在编程中,原子动作是一个突然有效地发生。一个原子动作在中途是不能停止的:要不完全执行完,要不一点也不执行。直到原子操作完全执行,它的副作用才会可见。        我们已经看见了自增长表达式,比如c++,不描述一个原子操作。甚至非常简单的表达式可以定义复杂的动作,可以分解为其他的动作。可是,有些动作你可以指定为原子的:       1 引用变量和大多数基本数据类型(除了long和double)的读写是原子的       2 所有声明为volatile字段的变量读写是原子的(包括long和double)    原子动作不能交叉,这样它们就不必担心使用时遇到线程争用了。可是,这不能完全 ...
同步是建立在一个内部的实体上,被称作内在锁或者监视锁。(同步锁的api中经常涉及这个实体的简单的称作“监视器”)内在锁在同步的两方面都扮演了一个角色:强制占有一个对象的状态和建立happens-before关系,这样基本上可见。 每个对象都有一个与之关联的内在锁。按照惯例,一个线程,需要独占和一致的一个对象的字段,在进入这个对象前得需要这个对象的内在锁,当处理完这些字段后,需要释放这些内在锁。只有有一个线程拥有一个内在锁,其他的线程就不能获取这同样的锁。当其他试图获取这把锁时将被阻塞。 当一个线程释放了内在锁,就在那个动作和同一把锁的子需求之间建立了happens-before的关系。 ...
Synchronized方法 Synchronized methods 使用一个简单的策略阻止了线程争用和内存一致性错误:如果一个对象对与许多线程可见,这个对象变量的所有读写操作 要使用synchronized方法。(一个重要的异常:final fields ,在对象创建后不能被修改,能够被非synchronized方法安全的读,只要对象被构建)。虽然这种策略是有效地,但是引发了活性的问题,这将在下一章节看到。
Skype uses PostgreSQL as their backend database. PostgreSQL doesn't get enough run in the database world so I was excited to see how PostgreSQL is used "as the main DB for most of [Skype's] business needs." Their approach is to use a traditional stored procedure interface for accessing data ...
class对象 instance对象 两者在静态方法中 加锁对象迥异  通过代码演示 同步块的加锁对象
java nio 原理   NIO有一个主要的类Selector 类似观察者 只要我们把需要探知的socketchannel 告诉socket ,我们接着做别的事情,当有事情发生的时候,他就会通知我们,传回一组selectionkey,我们读取这些key,就会获得刚刚注册的socketchannel,然后从这些channel中读取数据,肯定可以得到,然后处理数据
1 重写与重载   重写:子类与父类之间 子类的方法重写父类的方法 要求方法名相同 参数类型 个数 相同 定义不同 访问权限必须不小于父类 返回值必须相同   重载:同一个类之间,多个方法名相同,但是参数类型或个数不同 不以返回值作为参考 2 String StringBuffer StringBuilder String的值不能修改 如果要修改 必须重新新建对象 当内存中无效引用多了后 系统GC就会回收 速度就慢了 从而影响系统性能 StringBuffer 的值可以修改 无需新建对象 线程安全 效率低于StringBuilder StringBuilder 除了值可以修改 另外不是 ...

java 笔记

    博客分类:
  • java
对象引用的实质是 对象可以通过地址直接访问。对象在存储器中的存储地址,因此可以将存储地址解释为对象的引用而不是数组索引
1 String s = "hello"; s = s+"world"; 这两行代码执行后,原始的String对象中的内容改变了没有? 没有,因为String被设计为不可变类,所以它的所有对象都是不可变对象,在这段代码中,s原先指向一个String对象,内容是“hello”,然后我们对s进行了+的操作,那么s所指向的那个对象的内容没有改变,这时s不再指向原有对象,而是指向另一个对象,内容为helloworld。原来的那个对象还是存在于内存中,只是s这个对象引用不再指向原有变量。 得出结论,如果经过对字符串进行修改的话,那么使用String来代表字符串会引 ...
1 overloading 重载 (1) 方法重载是让类以一种统一的方式处理不同类型数据的手段,多个同名函数同时存在,具有不同参数个数/类型,重载是一个类中多态性的表现 (2) java方法重载就是在同一个类中创建多个具有相同的方法名,但是参数类型和个数不同,调用的时候根据传递过来的参数个数和类型判断该使用哪个方法 (3) 重载的时候,方法名要相同,但是参数类型和个数不同,返回值类型可以相同也可以不同,不以此作为判断是否重载的标准 2 overriding 重写   (1) 父类与子类之间的多态性,对父类的函数进行重新定义,如果在子类中定义了某个方法与父类有相同的方法名和参数,就说该方法 ...
类装载器就是寻找类的字节码文件并构造出类在JVM内部表示对象的组件 在java中类装载器把一个雷装入jvm中,要经过以下步骤: 1 装载:查找和导入Class文件 2 链接:执行校验,准备和解析步骤,其中解析步骤是可以选择的    a 校验:检查载入Class文件数据的正确性    b 准备:给类的静态变量分配存储空间    c 解析:将符号引用转为直接引用 3 初始化:对类的静态变量,静态代码执行初始化工作 JVM在运行的时候会产生三个ClassLoader:根装载器,ExtClassLoader(扩展类装载器)和 AppClassLoader(系统类装载器)
HashMap是Map的一个子接口 无序 允许key及value为空 不允许key重复 但value可以重复, 另外不是线程安全的 HashTable是Collection的子类,不允许key及value为空 是HashMap的重量级实现 线程安全 性能上比HashMap弱。其方法实现了Synchronize,而在HashMap不是,在多个线程访问的hashtable的时候 不需要自己实现同步方法,但是hashmap必须自己实现同步方法
1 单例模式分为三种:懒汉式单例 饿汉式单例 登记式单例 2 单例模式的特点:    a 单例模式只有一个实例    b 单例模式必须自己创建自己的唯一实例    c 单例模式必须给其他类提供这一实例 3 用处及作用    单例模式确保某个类只有一个实例,并且自动实例化并向整个系统提供这个实例。在计算机系统中,线程池,缓存,日志对象,对话框,打印机,显卡的驱动程序对象常被设计成单例,总之单例模式就是为了避免不一致状态,避免政出多头 4 a 懒汉式单例类 public class Singleton { private static Singleton singleton = null; p ...
Global site tag (gtag.js) - Google Analytics