多线程之不共享数据和共享数据
来源:互联网 发布:java正则表达式$ 编辑:程序博客网 时间:2024/05/20 07:19
我们在设计线程的时候,有时候希望他共享数据,有时候又希望不,那么这两种情况究竟怎么做呢?
不共享数据
不共享数据就是每个都是独立的线程,再去调自己的start方法就可以不共享数据了,下面看下代码。
public class NotShareData extends Thread {
private int count=5;
public NotShareData(String name){
super();
this.setName(name);
}
@Override
public void run(){
super.run();
while(count>0){
count--;
System.out.println(Thread.currentThread().getName()+"计算的count="+count);
}
}
}
接下来看下测试方法。
NotShareData nsd1=new NotShareData("1");
NotShareData nsd2=new NotShareData("2");
NotShareData nsd3=new NotShareData("3");
nsd1.start();
nsd2.start();
nsd3.start();
这里实例化了三个线程,通过调用每个线程的start方法之后,就可以不共享数据了,下面看下结果。
共享数据
共享数据的情况就是多个线程可以访问同一个对象。
public class ShareData extends Thread {
private int count=5;
@Override
public void run(){
super.run();
count--;
System.out.println(Thread.currentThread().getName()+"计算的count="+count);
}
}
这里不需要用while循环,因为我们是要多个线程一起访问。
下面看下测试方法。
ShareData sd=new ShareData();
Thread t1=new Thread(sd,"1");
Thread t2=new Thread(sd,"2");
Thread t3=new Thread(sd,"3");
Thread t4=new Thread(sd,"4");
Thread t5=new Thread(sd,"5");
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
这里调用的是Thread方法构造函数
所以这里五个线程调用的都是同一个对象,就做到了共享数据了。下面看下结果
这里可以看到,共享数据的一个问题,线程安全问题。其实在JVM中,i--操作是要分为三部分的,1.取原有的i值2.计算i-1 3.对i进行赋值,那么多个线程都在访问这个操作的话,肯定会出现线程安全的问题,所以在run方法前面要加上synchronized关键字就可以了。
通过在run方法前加入synchronized关键字,使多个线程在执行run方法时,以排队的方式进行处理吗。当一个线程调用run前,先判断run方法有没有被上锁,如果上锁,说明其他线程正在调用run方法,必须等待其他线程对run方法结束调用之后才可以执行run方法。
synchronized可以在任意对象及方法上加锁,而加锁的这段代码称为"互斥区"或“临界区”。
- 多线程之不共享数据和共享数据
- 线程的数据共享和不共享
- java多线程共享数据和数据并发
- C#多线程共享数据
- C#多线程共享数据
- C#多线程共享数据
- perl 多线程共享数据
- 多线程共享数据
- 多线程共享数据案例
- 多线程中的数据共享
- 多线程五共享数据
- C#多线程共享数据
- 多线程数据共享
- 多线程数据共享
- 多线程数据共享
- 多线程数据共享分析
- 多线程共享数据
- 多线程---数据共享
- Python生成验证码
- android 之Fragment坑
- 同步、异步、阻塞、非阻塞概念和各自之间的关系
- mysql的慢查询
- 数据库DML语句insert
- 多线程之不共享数据和共享数据
- SpringMVC RESTful风格CURD并集成Swagger2
- JavaWeb使用SpringMVC的简单案例
- 2017多校训练第二场 hdu6050 Funny Function(数学+快速幂+逆元)
- sql语句给数据库减肥,下面以网狐6603源码搭建为案例
- linux 调度总结
- 利用URLClassLoader读取Jar包并反射类(利用Tomcat源码)
- java分布式服务框架Dubbo的介绍与使用
- UVA 11817 Tunnelling the Earth