- 浏览: 8077 次
最新评论
文章列表
Java并发编程:Thread类的使用
- 博客分类:
- 多线程学习
在前面2篇文章分别讲到了线程和进程的由来、以及如何在Java中怎么创建线程和进程。今天我们来学习一下Thread类,在学习Thread类之前,先介绍与线程相关知识:线程的几种状态、上下文切换,然后接着介绍Thread类中的方法的 ...
Java ConcurrentModificationException异常原因和解决方法
在前面一篇文章中提到,对Vector、ArrayList在迭代的时候如果同时对其进行修改就会抛出java.util.ConcurrentModificationException异常。下面我们就来讨论以下这个异常出现的原因以及解决办法。
以下是本文目录大纲:
一.ConcurrentModificationException异常出现的原因
二.在单线程环境下的解决办法
三.在多线程环境下的解决方法
若有不正之处请多多谅解,并欢迎批评指正
请尊重作者劳动成果, ...
线程通信概念:线程是操作系统中独立的个体,但是这些个体不经过特殊的处理就不能成为一个整体,线程间的通信就成为整体的必用方式之一,当线程存在通信指挥,系统间的交互性会更强大,在提高cpu的利用率的同时,还会使开发人员对线程任务处理的过程中进行有效的把控和监督。
使用wait和notify 方法实现线程间的通信 (注意这两个方法都是object类的方法,换句话说java为所有对象都提供了这两个方法)
wait 和notify必须配合synchronized关键字使用
wait方法释放锁,notify方法不释放锁
二,线程间的通信方式
①同步
这里讲的同步是指多个线程通过syn ...
volatile关键字
- 博客分类:
- 多线程学习
volatile概念
volatile关键字主要作用就是在多个线程之间可见,当一个变量被定义为volatile之后,就可以保证此变量对所有线程的可见性,即当一个线程修改了此变量的值的时候,变量新的值对于其他线程来说是可以立即得知的。可以理解成:对volatile变量所有的写操作都能立刻被其他线程得知。但是这并不代表基于volatile变量的运算在并发下是安全的,因为volatile只能保证内存可见性,却没有保证对变量操作的原子性
实例
public class RunThread extends Thread{
private boolean isRunning = t ...
synchronized细节
- 博客分类:
- 多线程学习
synchronized锁重入
关键字synchronized拥有锁重入的功能,也就是在使用synchronized时,当一个线程得到一个对象的锁后,再次请求该对象是可以再次得到该对象的锁
示例:
public class SyncDubbo1 {
public synchronized void method1(){
System.ou ...
脏读
对于对象的同步和异步方法,我们在设计自己的程序的时候,一定要考虑问题的整体性,不然会出现数据不一致的错误,很经典的错误就是脏读(dirtyRead)
public class DirtyRead {
private String username = "bjsxt";
private String password = "123";
public synchronized void setValue(String username, String password){
this.username ...
线程安全:当多个线程访问某一个类(对象或方法)时,这个对象始终都能表现出正确的行为,那么这个类(对象或方法)就是线程安全的
synchronized:
可以在任意对象及方法上加锁,而加锁的这段代码称为"互斥区"或"临界区"
例子:
public class MyThread extends Thread{
private int count = 5 ;
//synchronized加锁
public void run(){
count--;
System.out.println ...