上一页 1 ··· 41 42 43 44 45 46 47 48 49 ··· 55 下一页
摘要: 同步集合与并发集合都为多线程和并发提供了合适的线程安全的集合,不过并发 集合的可扩展性更高。在 Java1.5 之前程序员们只有同步集合来用且在多线程并发 的时候会导致争用,阻碍了系统的扩展性。Java5 介绍了并发集合像 ConcurrentHashMap,不仅提供线程安全还用锁分离和内部分区等现 阅读全文
posted @ 2020-06-07 16:20 咔啡 阅读(473) 评论(0) 推荐(0)
摘要: 不对,如果两个对象 x 和 y 满足 x.equals(y) == true,它们的哈希码(hash code) 应当相同。Java 对于 eqauls 方法和 hashCode 方法是这样规定的:(1)如果两个 第 223 页 共 485 页对象相同(equals 方法返回 true),那么它们的 阅读全文
posted @ 2020-06-07 16:19 咔啡 阅读(677) 评论(0) 推荐(0)
摘要: 每一个线程都是有优先级的,一般来说,高优先级的线程在运行时会具有优先权, 但这依赖于线程调度的实现,这个实现是和操作系统相关的(OS dependent)。我 们可以定义线程的优先级,但是这并不能保证高优先级的线程会在低优先级的线 程前执行。线程优先级是一个 int 变量(从 1-10),1 代表最 阅读全文
posted @ 2020-06-07 16:16 咔啡 阅读(533) 评论(0) 推荐(0)
摘要: notify() 方法不能唤醒某个具体的线程,所以只有一个线程在等待的时候它才有 用武之地。而 notifyAll()唤醒所有线程并允许他们争夺锁确保了至少有一个线程 能继续运行。 阅读全文
posted @ 2020-06-07 16:14 咔啡 阅读(189) 评论(0) 推荐(0)
摘要: 当线程间是可以共享资源时,线程间通信是协调它们的重要的手段。 Object 类中wait()\notify()\notifyAll()方法可以用于线程间通信关于资源的锁的状态。 阅读全文
posted @ 2020-06-07 16:11 咔啡 阅读(1598) 评论(0) 推荐(0)
摘要: Synchronized 关键字,Lock 锁实现,分布式锁等。 阅读全文
posted @ 2020-06-07 16:10 咔啡 阅读(448) 评论(0) 推荐(0)
摘要: 1、CountDownLatch 简单的说就是一个线程等待,直到他所等待的其他线程都执 行完成并且调用 countDown()方法发出通知后,当前线程才可以继续执行。 2、cyclicBarrier 是所有线程都进行等待,直到所有线程都准备好进入 await()方 法之后,所有线程同时开始执行! 3 阅读全文
posted @ 2020-06-07 16:08 咔啡 阅读(324) 评论(0) 推荐(0)
摘要: Java 是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本 数据类型,但是为了能够将这些基本数据类型当成对象操作,Java 为每一个基本 数据类型都引入了对应的包装类型(wrapper class),int 的包装类就是 Integer, 从 Java 5 开始引入了自动装箱/拆箱 阅读全文
posted @ 2020-06-07 16:07 咔啡 阅读(219) 评论(0) 推荐(0)
摘要: 使当前线程从执行状态(运行状态)变为可执行态(就绪状态)。 当前线程到了就绪状态,那么接下来哪个线程会从就绪状态变成执行状态呢?可 能是当前线程,也可能是其他线程,看系统的分配了。 阅读全文
posted @ 2020-06-07 16:06 咔啡 阅读(848) 评论(0) 推荐(0)
摘要: 2 << 3(左移 3 位相当于乘以 2 的 3 次方,右移 3 位相当于除以 2 的 3 次方)。 补充:我们为编写的类重写 hashCode 方法时,可能会看到如下所示的代码,其实我们不太理解为什么要使用这样的乘法运算来产生哈希码(散列码),而且为什么这个数是个素数,为什么通常选择 31 这个数 阅读全文
posted @ 2020-06-07 16:03 咔啡 阅读(249) 评论(0) 推荐(0)
摘要: 对于可见性,Java 提供了 volatile 关键字来保证可见性。 当一个共享变量被 volatile 修饰时,它会保证修改的值会立即被更新到主存,当 有其他线程需要读取时,它会去内存中读取新值。 从实践角度而言,volatile 的一个重要作用就是和 CAS 结合,保证了原子性,详 细的可以参见 阅读全文
posted @ 2020-06-07 16:02 咔啡 阅读(282) 评论(0) 推荐(0)
摘要: 数组没有 length()方法,有 length 的属性。 String 有 length()方法。JavaScript中,获得字符串的长度是通过 length 属性得到的,这一点容易和 Java 混淆。 阅读全文
posted @ 2020-06-07 16:01 咔啡 阅读(433) 评论(0) 推荐(0)
摘要: 在 Java 中可以有很多方法来保证线程安全——同步,使用原子类(atomic concurrent classes),实现并发锁,使用 volatile 关键字,使用不变类和线程安 全类。 阅读全文
posted @ 2020-06-07 15:59 咔啡 阅读(1110) 评论(1) 推荐(0)
摘要: JVM 中类的装载是由类加载器(ClassLoader)和它的子类来实现的,Java 中的 类加载器是一个重要的 Java 运行时系统组件,它负责在运行时查找和装入类文件 中的类。 由于 Java 的跨平台性,经过编译的 Java 源程序并不是一个可执行程序,而是一 个或多个类文件。当 Java 程 阅读全文
posted @ 2020-06-07 15:58 咔啡 阅读(216) 评论(0) 推荐(0)
摘要: 阻塞式方法是指程序会一直等待该方法完成期间不做其他事情,ServerSocket 的 accept()方法就是一直等待客户端连接。这里的阻塞是指调用结果返回之前,当前 线程会被挂起,直到得到结果之后才会返回。此外,还有异步和非阻塞式方法在 任务完成前就返回。 阅读全文
posted @ 2020-06-07 15:57 咔啡 阅读(957) 评论(0) 推荐(0)
摘要: 首先明确的是,char的长bai度是不可变du的,而varchar的长度是可变的,定义一个char[10]和varchar[10],如果zhi存进去的是‘abcd’,那么daochar所占的长度依然为10,除了字符‘abcd’外,后面跟六个空格,而varchar就立马把长度变为4了,取数据的时候,c 阅读全文
posted @ 2020-06-07 15:56 咔啡 阅读(932) 评论(0) 推荐(0)
摘要: 这是 JDK 强制的,wait()方法和 notify()/notifyAll()方法在调用前都必须先获得对 象的锁 阅读全文
posted @ 2020-06-06 16:48 咔啡 阅读(364) 评论(0) 推荐(0)
摘要: 理论上 Java 因为有垃圾回收机制(GC)不会存在内存泄露问题(这也是 Java 被 广泛使用于服务器端编程的一个重要原因);然而在实际开发中,可能会存在无 用但可达的对象,这些对象不能被 GC 回收,因此也会导致内存泄露的发生。例如 Hibernate 的 Session(一级缓存)中的对象属于 阅读全文
posted @ 2020-06-06 16:20 咔啡 阅读(293) 评论(0) 推荐(0)
摘要: -Xss 每个线程的栈大小 阅读全文
posted @ 2020-06-05 22:25 咔啡 阅读(400) 评论(0) 推荐(0)
摘要: 同步块是更好的选择,因为它不会锁住整个对象(当然你也可以让它锁住整个对 象)。同步方法会锁住整个对象,哪怕这个类中有多个不相关联的同步块,这通 常会导致他们停止执行并需要等待获得这个对象上的锁。 同步块更要符合开放调用的原则,只在需要锁住的代码块锁住相应的对象,这样 从侧面来说也可以避免死锁。 阅读全文
posted @ 2020-06-05 21:39 咔啡 阅读(1638) 评论(0) 推荐(0)
摘要: 有两种方式: 1). 实现 Cloneable 接口并重写 Object 类中的 clone()方法; 2). 实现 Serializable 接口,通过对象的序列化和反序列化实现克隆,可以实现真 正的深度克隆,代码如下。 import java.io.ByteArrayInputStream; i 阅读全文
posted @ 2020-06-05 21:17 咔啡 阅读(1236) 评论(0) 推荐(0)
摘要: 1、乐观锁:就像它的名字一样,对于并发间操作产生的线程安全问题持乐观状态, 乐观锁认为竞争不总是会发生,因此它不需要持有锁,将比较-替换这两个动作作 为一个原子操作尝试去修改内存中的变量,如果失败则表示发生冲突,那么就应 该有相应的重试逻辑。 2、悲观锁:还是像它的名字一样,对于并发间操作产生的线程 阅读全文
posted @ 2020-06-05 19:51 咔啡 阅读(883) 评论(0) 推荐(0)
摘要: 在最外层循环前加一个标记如 A,然后用 break A;可以跳出多重循环。(Java 中 支持带标签的 break 和 continue 语句,作用有点类似于 C 和 C++中的 goto 语 句,但是就像要避免使用 goto 一样,应该避免使用带标签的 break 和 continue, 因为它不 阅读全文
posted @ 2020-06-05 19:47 咔啡 阅读(287) 评论(0) 推荐(0)
摘要: kill -3 [java pid] 不会在当前终端输出,它会输出到代码执行的或指定的地方去。比如,kill -3 tomcat pid, 输出堆栈到 log 目录下。 Jstack [java pid] 这个比较简单,在当前终端显示,也可以重定向到指定文件中。 -JvisualVM:Thread 阅读全文
posted @ 2020-06-05 19:26 咔啡 阅读(1476) 评论(0) 推荐(0)
摘要: Volatile 变量可以确保先行关系,即写操作会发生在后续的读操作之前, 但它并不 能保证原子性。例如用 volatile 修饰 count 变量那么 count++ 操作就不是原子 性的。 而 AtomicInteger 类提供的 atomic 方法可以让这种操作具有原子性如 getAndInc 阅读全文
posted @ 2020-06-05 19:16 咔啡 阅读(2049) 评论(0) 推荐(0)
摘要: Java 平台提供了两种类型的字符串:String 和 StringBuffer/StringBuilder,它 们可以储存和操作字符串。其中 String 是只读字符串,也就意味着 String 引用的 字符串内容是不能被改变的。而 StringBuffer/StringBuilder 类表示的字 阅读全文
posted @ 2020-06-05 19:14 咔啡 阅读(193) 评论(0) 推荐(0)
摘要: 调用基本数据类型对应的包装类中的方法 parseXXX(String)或 valueOf(String)即可返回相应基本类型; 一种方法是将基本数据类型与空字符串(”“)连接(+)即可获得其所 对应的字符串;另一种方法是调用 String 类中的 valueOf()方法返回相应字符串 阅读全文
posted @ 2020-06-05 19:13 咔啡 阅读(1618) 评论(0) 推荐(0)
摘要: JavaScript 与 Java 是两个公司开发的不同的两个产品。Java 是原 Sun Microsystems 公司推出的面向对象的程序设计语言,特别适合于互联网应用程序 开发;而 JavaScript 是 Netscape 公司的产品,为了扩展 Netscape 浏览器的功 能而开发的一种可 阅读全文
posted @ 2020-06-05 19:04 咔啡 阅读(374) 评论(0) 推荐(0)
摘要: final:修饰符(关键字)有三种用法:如果一个类被声明为 final,意味 着它不能再派生出新的子类,即不能被继承,因此它和 abstract 是反义词。将 变量声明为 final,可以保证它们在使用中不被改变,被声明为 final 的变量必须 在声明时给定初值,而在以后的引用中只能读取不可修改。 阅读全文
posted @ 2020-06-05 18:39 咔啡 阅读(291) 评论(0) 推荐(0)
摘要: String s1 = "你好"; String s2 = new String(s1.getBytes("GB2312"), "ISO-8859-1"); 阅读全文
posted @ 2020-06-04 17:21 咔啡 阅读(329) 评论(0) 推荐(0)
摘要: 接口可以继承接口,而且支持多重继承。抽象类可以实现(implements)接口,抽象类可继承具体类也可以继承抽象类。 阅读全文
posted @ 2020-06-03 17:45 咔啡 阅读(324) 评论(0) 推荐(0)
摘要: 1、CAS 容易造成 ABA 问题 一个线程 a 将数值改成了 b,接着又改成了 a,此时 CAS 认为是没有变化,其实 是已经变化过了,而这个问题的解决方案可以使用版本号标识,每操作一次 version 加 1。在 java5 中,已经提供了 AtomicStampedReference 来解决问 阅读全文
posted @ 2020-06-03 16:18 咔啡 阅读(267) 评论(0) 推荐(0)
摘要: AQS 是 AbustactQueuedSynchronizer 的简称,它是一个 Java 提高的底层同步工具类,用一个 int 类型的变量表示同步状态,并提供了一系列的 CAS 操作来管理这个同步状态。AQS 是一个用来构建锁和同步器的框架,使用 AQS 能简单且高效地构造出应用广泛的大量的同步 阅读全文
posted @ 2020-06-03 16:05 咔啡 阅读(628) 评论(0) 推荐(0)
摘要: Thread 类的 sleep()和 yield()方法将在当前正在执行的线程上运行。所以在其他处于等待状态的线程上调用这些方法是没有意义的。这就是为什么这些方法是静态的。它们可以在当前正在执行的线程中工作,并避免程序员错误的认为可以在其他非运行线程调用这些方法。 阅读全文
posted @ 2020-06-02 21:36 咔啡 阅读(1052) 评论(0) 推荐(0)
摘要: 1、newCachedThreadPool 创建一个可缓存线程池 2、newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数。 3、newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。 4、newSingleThreadExecutor 阅读全文
posted @ 2020-06-02 21:32 咔啡 阅读(621) 评论(0) 推荐(0)
摘要: 每个 MyISAM 表格以三种格式存储在磁盘上: ·“.frm”文件存储表定义 ·数据文件具有“.MYD”(MYData)扩展名 索引文件具有“.MYI”(MYIndex)扩展名 阅读全文
posted @ 2020-06-02 21:00 咔啡 阅读(363) 评论(0) 推荐(0)
摘要: 使用 Thread 类的 setDaemon(true)方法可以将线程设置为守护线程,需要注意的是,需要在调用 start()方法前调用这个方法,否则会抛出IllegalThreadStateException 异常。 阅读全文
posted @ 2020-06-02 20:59 咔啡 阅读(961) 评论(0) 推荐(0)
摘要: 方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的返回类型,比父类被重 阅读全文
posted @ 2020-06-02 20:58 咔啡 阅读(227) 评论(0) 推荐(0)
摘要: GC 是垃圾收集的意思,内存处理是编程人员容易出现问题的地方,忘记或者错误 的内存回收会导致程序或系统的不稳定甚至崩溃,Java 提供的 GC 功能可以自动 监测对象是否超过作用域从而达到自动回收内存的目的,Java 语言没有提供释放 已分配内存的显示操作方法。Java 程序员不用担心内存管理,因为 阅读全文
posted @ 2020-06-02 20:57 咔啡 阅读(2028) 评论(0) 推荐(0)
摘要: Java 通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在 Java 中,每个异常都是一个对象,它是 Throwable 类或其子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并可以对其进行处理。Java 阅读全文
posted @ 2020-06-02 20:56 咔啡 阅读(357) 评论(0) 推荐(0)
上一页 1 ··· 41 42 43 44 45 46 47 48 49 ··· 55 下一页