黑马程序员--JAVA基础复习之多线程(二)线程安全与解决方法
2013-08-14 14:23
549 查看
-------
android培训、java培训、期待与您交流! ----------
解决方法:对多条操作共享数据的语句,只能让一个线程都执行完。在执行过程中,其他线程不可以参与执行。
同步的前提:
1,必须要有两个或者两个以上的线程,才需要同步。
2,多个线程必须保证使用的是同一个锁。
JAVA对于多线程安全问题提出了专业的解决方式。就是同步代码块。
synchronized (obj) { //obj 位置是一个对象锁,对象可以任意。
涉及操作共享数据的语句
}
同步的第二种表现形式:
同步函数:其实就是将同步关键字定义在函数上,让函数具备了同步性。
同步函数关键字 synchronized
格式如public synchroonized void test(){}
同步函数是用的哪个锁呢?
通过验证,函数都有自己所属的对象this,所以同步函数所使用的锁就是this锁。
当同步函数被static修饰时,这时的同步用的是哪个锁呢?
静态函数在加载时所属于类,这时有可能还没有该类产生的对象,但是该类的字节码文件加载进内存就已经被封装成了对象,这个对象就是该类的字节码文件对象。
所以静态加载时,只有一个对象存在,那么静态同步函数就使用的这个对象。
这个对象就是 类名.class
同步死锁:通常只要将同步进行嵌套,就可以看到现象。同步函数中有同步代码块,同步代码块中还有同步函数。
同步代码块解决售票线程安全问题
主函数
多线程下的单例设计模式
-------
android培训、java培训、期待与您交流! ----------
android培训、java培训、期待与您交流! ----------
多线程安全问题
问题的原因:当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完,另一个线程参与进来执行。导致共享数据的错误。解决方法:对多条操作共享数据的语句,只能让一个线程都执行完。在执行过程中,其他线程不可以参与执行。
同步
解决安全问题的方法:只要将操作共享数据的语句在某一时段让一个线程执行完,在执行过程中,其他线程不能进来执行就可以解决这个问题。同步的前提:
1,必须要有两个或者两个以上的线程,才需要同步。
2,多个线程必须保证使用的是同一个锁。
JAVA对于多线程安全问题提出了专业的解决方式。就是同步代码块。
synchronized (obj) { //obj 位置是一个对象锁,对象可以任意。
涉及操作共享数据的语句
}
同步的第二种表现形式:
同步函数:其实就是将同步关键字定义在函数上,让函数具备了同步性。
同步函数关键字 synchronized
格式如public synchroonized void test(){}
同步函数是用的哪个锁呢?
通过验证,函数都有自己所属的对象this,所以同步函数所使用的锁就是this锁。
当同步函数被static修饰时,这时的同步用的是哪个锁呢?
静态函数在加载时所属于类,这时有可能还没有该类产生的对象,但是该类的字节码文件加载进内存就已经被封装成了对象,这个对象就是该类的字节码文件对象。
所以静态加载时,只有一个对象存在,那么静态同步函数就使用的这个对象。
这个对象就是 类名.class
同步死锁:通常只要将同步进行嵌套,就可以看到现象。同步函数中有同步代码块,同步代码块中还有同步函数。
同步代码块解决售票线程安全问题
主函数
多线程下的单例设计模式
-------
android培训、java培训、期待与您交流! ----------
相关文章推荐
- 黑马程序员--JAVA基础复习之多线程(三)线程间通信 生产者消费者
- 黑马程序员--java基础复习之多线程及线程间通信
- 黑马程序员--JAVA基础复习之多线程(一)概念与创建方法
- JAVA基础再回首(二十四)——多线程的概述、实现方式、线程控制、生命周期、多线程程序练习、安全问题的解决
- Java线程安全问题及线程安全解决方法
- 黑马程序员——java中关于同步函数(或同步代码块)解决多线程安全问题的加锁
- Java基础(高级)——多线程的理解和Synchronized实例,以及线程间通信,wait,notify等方法
- java 多线程学习之多生产者多消费者产生的线程安全问题分析与解决:Lock和Condition
- Java基础 多线程 解决安全问题 等待唤醒机制 Lock Condition interrupt join setPriority yield
- 黑马程序员--Java基础--多线程安全问题
- java 多线程(线程间通信-解决安全问题)
- [Java]Java多线程数据安全(同步线程的方法)
- JAVA基础 day12 线程间通信 多线程一些常用方法
- 黑马程序员——Java多线程之线程安全问题
- Java SimpleDateFormat 线程不安全问题及解决方法
- 黑马程序员——JAVA基础之多线程的安全问题
- Java_基础—多线程(匿名内部类实现线程的两种方式和设置名字的方法)
- java再复习——多线程之初识线程,并从源码角度分析start与run方法,Thread类与Runnable接口
- 黑马程序员——Java语言基础——04.多线程(2)线程间通信
- 黑马程序员-18-java基础-多线程(1)-线程与同步