Java并发编程(10):使用wait/notify/notifyAll实现线程间通信的几点重要说明

在Java中,可以通过配合调用Object对象的wait()方法和notify()方法或notifyAll()方法来实现线程间的通信。在线程中调用wait()方法,将阻塞等待其他线程的通知(其他线程调用notify()方法或notifyAll()方法),在线程中调用notify()方法或notif...

2018-11-11 14:34:27

阅读数 67

评论数 0

Java并发编程(9):死锁(含代码)

当线程需要同时持有多个锁时,有可能产生死锁。考虑如下情形: 线程A当前持有互斥所锁lock1,线程B当前持有互斥锁lock2。接下来,当线程A仍然持有lock1时,它试图获取lock2,因为线程B正持有lock2,因此线程A会阻塞等待线程B对lock2的释放。如果此时线程B在持有lock2的时候,...

2018-11-10 14:21:13

阅读数 66

评论数 0

Java并发编程(8):多线程环境中安全使用集合API(含代码)

在集合API中,最初设计的Vector和Hashtable是多线程安全的。例如:对于Vector来说,用来添加和删除元素的方法是同步的。如果只有一个线程与Vector的实例交互,那么,要求获取和释放对象锁便是一种浪费,另外在不必要的时候如果滥用同步化,也有可能会带来死锁。因此,对于更改集合内容的方...

2018-11-09 14:56:53

阅读数 46

评论数 0

Java并发编程(7):使用synchronized获取互斥锁的几点说明

在并发编程中,多线程同时并发访问的资源叫做临界资源,当多个线程同时访问对象并要求操作相同资源时,分割了原子操作就有可能出现数据的不一致或数据不完整的情况,为避免这种情况的发生,我们会采取同步机制,以确保在某一时刻,方法内只允许有一个线程。 采用synchronized修饰符实现的同步机制叫做互斥锁...

2018-11-08 20:58:19

阅读数 39

评论数 0

Java并发编程(6):Runnable和Thread实现多线程的区别(含代码)

Java中实现多线程有两种方法:继承Thread类、实现Runnable接口,在程序开发中只要是多线程,肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下优势: 1、可以避免由于Java的单继承特性而带来的局限; 2、增强程序的健壮性,代码能够被多个线...

2018-11-08 14:27:38

阅读数 37

评论数 0

Java并发编程(5):volatile变量修饰符-意料之外的问题(含代码)

volatile用处说明 在JDK1.2之前,Java的内存模型实现总是从主存(即共享内存)读取变量,是不需要进行特别的注意的。而随着JVM的成熟和优化,现在在多线程环境下volatile关键字的使用变得非常重要。 在当前的Java内存模型下,线程可以把变量保存在本地内存(比如机器的寄存器)中,而...

2018-11-07 15:05:15

阅读数 35

评论数 0

Java并发编程(4):守护线程与线程阻塞的四种情况

守护线程 Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程) 用户线程即运行在前台的线程,而守护线程是运行在后台的线程。 守护线程作用是为其他前台线程的运行提供便利服务,而且仅在普通、非守护线程仍然运行时才需要,比如垃圾回收线程就是一个守护线程。当VM...

2018-11-06 22:26:39

阅读数 37

评论数 0

Java并发编程(3):线程挂起、恢复与终止的正确方法(含代码)

挂起和恢复线程 Thread 的API中包含两个被淘汰的方法,它们用于临时挂起和重启某个线程,这些方法已经被淘汰,因为它们是不安全的,不稳定的。如果在不合适的时候挂起线程(比如,锁定共享资源时),此时便可能会发生死锁条件——其他线程在等待该线程释放锁,但该线程却被挂起了,便会发生死锁。另外,在长时...

2018-11-06 14:33:34

阅读数 33

评论数 0

Java并发编程(2):线程中断(含代码)

使用interrupt()中断线程 当一个线程运行时,另一个线程可以调用对应的Thread对象的interrupt()方法来中断它,该方法只是在目标线程中设置一个标志,表示它已经被中断,并立即返回。这里需要注意的是,如果只是单纯的调用interrupt()方法,线程并没有实际被中断,会继续往下执行...

2018-11-05 22:22:56

阅读数 32

评论数 0

Java并发编程(1):可重入内置锁

每个Java对象都可以用做一个实现同步的锁,这些锁被称为内置锁或监视器锁。线程在进入同步代码块之前会自动获取锁,并且在退出同步代码块时会自动释放锁。获得内置锁的唯一途径就是进入由这个锁保护的同步代码块或方法。 当某个线程请求一个由其他线程持有的锁时,发出请求的线程就会阻塞。然而,由于内置锁是可重入...

2018-11-05 14:21:35

阅读数 61

评论数 1

JDK源码阅读:InterruptibleChannel与可中断IO,ig牛逼

Java传统IO是不支持中断的,所以如果代码在read/write等操作阻塞的话,是无法被中断的。这就无法和Thead的interrupt模型配合使用了。JavaNIO众多的升级点中就包含了IO操作对中断的支持。InterruptiableChannel表示支持中断的Channel。我们常用的Fi...

2018-11-04 17:35:39

阅读数 65

评论数 0

JDK源码阅读:ByteBuffer

Buffer是Java NIO中对于缓冲区的封装。在Java BIO中,所有的读写API,都是直接使用byte数组作为缓冲区的,简单直接。但是在Java NIO中,缓冲区这一概念变得复杂,可能是对应Java堆中的一块内存,也可能是对应本地内存中的一块内存。而byte数组只能用来指定Java堆中的一...

2018-11-04 14:18:04

阅读数 52

评论数 0

JDK 源码阅读 Reference

Java最初只有普通的强引用,只有对象存在引用,则对象就不会被回收,即使内存不足,也是如此,JVM会爆出OOME,也不会去回收存在引用的对象。 如果只提供强引用,我们就很难写出“这个对象不是很重要,如果内存不足GC回收掉也是可以的”这种语义的代码。Java在1.2版本中完善了引用体系,提供了4中引...

2018-11-02 14:15:57

阅读数 43

评论数 0

Disruptor源码阅读笔记

关于 Disruptor,网络上有很多的解释和说法。这里简单的概括下。Disruptor 是一个消费者生产者队列框架,据官网介绍,可以提供非常强大的性能。Disruptor 与其说为我们带来了一个框架,更多的是为我们带来了一个独特思路的编程实践。总结来说大致有3点。 使用循环数组的方式代替队列,使...

2018-11-01 15:11:50

阅读数 50

评论数 0

拯救 Java Code Style 强迫症

这篇文章缘起于上一个持续交付的咨询项目,当时正在指导客户团队的Java工程师做Code Review,发现一个很有意思的现象:有一位工程师对Code Style特别在意,所以在Code Review的大部分时间中都是该工程师在指出哪里哪里的格式不对,但是团队并没有找到改进方法,每次的结论都是“下次...

2018-10-31 21:20:46

阅读数 43

评论数 0

Java 代码字节:足智多谋的 Try-With-Resources

当通过 Java 实现业务实例时,对资源进行处理是司空见惯的。一般情况下,资源(如文件或 socket 句柄)封装在对象中,使用后必须关闭才能释放资源。通常开发人员有责任关闭自己所创建的资源,以避免资源冲突,一般都会放在 finally 语句块中处理。不这样做其实也不会产生编译错误,但很容易导致资...

2018-10-31 14:52:55

阅读数 36

评论数 0

重置密码解决MySQL for Linux错误 ERROR 1045 (28000):

一般这个错误是由密码错误引起,解决的办法自然就是重置密码。 假设我们使用的是root账户。 1,停止mysql服务 service mysqld stop 2,找到my.cnf文件 3,修改配置文件无密码登录 vi /etc/my.cnf 在最尾部加上 skip-grant-tables 保存(:...

2018-10-30 14:34:06

阅读数 1840

评论数 0

Linux下修改Mysql密码的三种方式,测试过效果,能正常使用

有时我们会忘记Mysql的密码,或者想改一个密码,以下将对这两种情况修改密码的三种解决方法做个总结 本文都以用户为 root 为例; 一、拥有原来的myql的root的密码; 方法一: 在mysql系统外,使用mysqladmin mysqladmin -u root -p password “t...

2018-10-29 14:55:15

阅读数 38

评论数 0

MySQL 8.0 中统计信息直方图的尝试

直方图是表上某个字段在按照一定百分比和规律采样后的数据分布的一种描述,最重要的作用之一就是根据查询条件,预估符合条件的数据量,为sql执行计划的生成提供重要的依据。 在MySQL 8.0之前的版本中,MySQL仅有一个简单的统计信息却没有直方图,没有直方图的统计信息可以说是没有任何意义的。 MyS...

2018-10-26 14:21:49

阅读数 28

评论数 0

MySQL 问题分析:ERROR 1071 : Specified key was too long;max

今天在MySQL 5.6版本的数据库中修改InnoDB表字段长度时遇到了”ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes”错误,第一次遇到这个错误,遂花了点学习、研究过、总结这个问题。 我们先来...

2018-10-25 19:22:25

阅读数 577

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭