java中多线程的安全问题以及解决办法(2)
来源:互联网 发布:我知女人心配乐 编辑:程序博客网 时间:2024/06/14 23:52
2.使用同步函数来解决线程存在的问题:
1.明确哪些是多线程运行的代码;2.哪些是共享数据;3.明确哪些代码是多线程操作共享数据的。
public static void main(String[] args) {
SynFunction stf=new SynFunction();
new Thread(stf).start();
new Thread(stf).start();
}
public class SynFunction implements Runnable{
private int sum=0;
// Object obj=new Object();
public void run() {
// TODO Auto-generated method stub
//synchronized(obj){
for(int k=0;k<3;k++){
this.add(100);
}
//}
}
public void add(int m){
sum+=m;
System.out.println(Thread.currentThread().getName()+":"+sum);
}
}
结果为:
Thread-0:200
Thread-0:300
Thread-0:400
Thread-1:200
Thread-1:500
Thread-1:600
出现和和谐的结果;
Thread-0:200
Thread-0:300
Thread-0:400
Thread-1:200
Thread-1:500
Thread-1:600
使用同步函数后:
publicclass SynFunctionimplements Runnable{
privateintsum=0;
// Objectobj=newObject();
publicvoid run() {
//TODO Auto-generatedmethod stub
//synchronized(obj){//在此加同步代码块,相当于每一个线程得把各自的三次循环执行完之后其他线程才能执行。就变成了顺序执行。
for(int k=0;k<3;k++){
this.add(100);//同步函数使用的锁对象时this
}
//}
}
publicsynchronized void add(int m){
sum+=m;
try {
Thread.sleep(1000);
}catch (InterruptedException e) {
//TODO Auto-generatedcatch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+":"+sum);
}
}
结果为:
Thread-0:100
Thread-1:200
Thread-0:300
Thread-1:400
Thread-1:500
Thread-0:600
总结同步函数使用的锁对象时:this
3.静态同步函数使用的锁是:类名.class,该方法所在类的字节码文件。
public class FileRun implements Runnable{
private static int sum=0;
public void run() {
// TODO Auto-generated method stub
for(int k=0;k<3;k++){
add(100);
}
}
public static synchronized void add(int m){
sum+=m;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+":"+sum);
}
}
public static void main(String[] args) {
FileRun fr=new FileRun();
new Thread(fr).start();
new Thread(fr).start();
}
结果为:
Thread-0:100
Thread-1:200
Thread-1:300
Thread-1:400
Thread-0:500
Thread-0:600
- java中多线程的安全问题以及解决办法
- java中多线程的安全问题以及解决办法(2)
- 多线程的安全问题的解决办法
- 多线程安全问题以及解决安全问题的原理
- Java 多线程的安全问题
- java进程、线程、多线程以及线程安全问题
- java 学习-----多线程的安全问题
- java基础-多线程的安全问题
- Java笔记 - 多线程的安全问题
- java中面对多线程安全问题,用什么样的Map
- 学习笔记--java基础--多线程中出现的安全问题
- 多线程安全问题及解决办法
- java多线程(6)--多线程的安全问题总结
- Java Tread多线程(2)多线程安全问题
- java笔记之java多线程的安全问题
- 多线程(多线程的安全问题)
- java多线程操作共享数据的安全问题
- Java基础——多线程的安全问题
- ios UIImagePickerController 导航栏透明
- 使用sentinel进行redis主从切换的操作步骤(failOver故障转移)(何志雄)
- 杭电 HDU 1061 Rightmost Digit
- opensuse下Qt5.4连接mysql (使用ldd查看缺少哪个库)
- android 关闭虚拟键盘
- java中多线程的安全问题以及解决办法(2)
- NGUI学习:(1)spine导入后图层顺序的问题
- 蓝桥杯 李白打酒
- iphone 访问webservice
- a个学生,各b门课程,找出有不及格的课程的学生及其学号
- 火柴羽毛球神
- [机器学习]如何选择模型--cross validation
- 简单的java web 统计在线人数实现方法
- 压缩感知测量矩阵之spark常数