Java 多线程解决并发问题 àì夳堔傛蜴生んèń 2021-09-20 17:44 316阅读 0赞 并发问题,是指在一个时刻内多个线程对一个对象或代码块同时访问读入或取出资源,你争我抢的,就会混乱掉,而不是按部就班,一个一个的去访问读取,就好比人们在旅游的地方上公共厕所,一个门里一个厕所,如果大家不排队一时间都去你争我抢的,这样怎么能行呢,所以给了一把锁,把门锁上,你进去之后,你自己方便,出来以后别人再进去方便。 这就如同Java 中提出了Synchroinzed的概念,对象锁和类锁。 我们多个线程访问一个代码块的时候,给它加一把锁,这样就实现串级操作,按顺序访问资源。 对象锁分为方法锁((默认锁对象为this,当前实例对象和同步代码块锁(自己指定的锁对象) 类锁(指的是synchronized修饰静态方法或指定锁对象为class对象) 方法锁形式:synchronized修饰普通的方法,默认为this 下面我们来进行一个实例 public class DispearRequest implements Runnable { static DispearRequest instance=new DispearRequest(); static int i=0; public static void main(String[] args) throws InterruptedException { Thread t1=new Thread(instance); Thread t2=new Thread(instance); t1.start(); t2.start(); t1.join(); t2.join(); System.out.println(i); } /* @Override public void run() { method(); } public static synchronized void method(){ for(int j=0;j<100000;j++){//使用类锁 i++; } }*/ @Override public void main(){ for (int j = 0; j < 100000; j++) { i++; //默认为不加锁,但这种形势下,最后的输出结果不是20000,因为当线程t1执行,可能还执行完就引起了并发问题,t2也开始执行了, 但两个都没执行完就结束了,最后的结果<20000 } } /* @Override public synchronized void run() { for(int j=0;j<100000;j++){//使用方法锁 i++; } }*/ /* @Override public void run() { synchronized (this) {//对象锁, for (int j = 0; j < 100000; j++) { i++; } } }*/ /* @Override public void run() { synchronized (DispearRequest.class) {//使用类锁 for (int j = 0; j < 100000; j++) { i++; } } }*/ } 用到了锁的代码块,会按部就班的执行代码,最后返回20000,这样解决了并发的问题。
相关 Java多线程并发问题解决示例 在Java编程中,多线程并发是一个常见且重要的问题。以下是一些问题及解决示例: 1. **竞态条件(Race Conditions)**:多个线程同时访问和修改共享资源,可能 ゝ一纸荒年。/ 2024年09月17日 16:03/ 0 赞/ 13 阅读
相关 Java多线程并发问题:实例及解决 在Java中,多线程并发问题主要体现在以下几个方面: 1. 线程安全:多个线程同时访问一个对象时,如果不对这个对象进行同步处理,就可能导致数据的不一致。 2. 死锁:当两个或 r囧r小猫/ 2024年09月12日 05:54/ 0 赞/ 14 阅读
相关 理解并解决Java多线程并发问题 在Java中,多线程并发问题是编程中的常见挑战。以下是一些常见的问题和解决方案: 1. **竞态条件**:多个线程对共享资源的访问顺序不一致,可能会导致错误的结果。 柔情只为你懂/ 2024年09月11日 05:03/ 0 赞/ 23 阅读
相关 理解并解决Java多线程并发问题 在Java中,多线程并发问题主要包括以下几种情况: 1. **死锁**:两个或更多的线程互相等待对方释放资源,导致都无法继续执行。 2. **优先级反转**:在一个具有优先 Myth丶恋晨/ 2024年09月06日 08:06/ 0 赞/ 26 阅读
相关 Java多线程并发问题实例 在Java多线程并发编程中,常见的问题包括死锁、活锁、资源争抢、优先级反转等。 以下是一个简单的例子来展示这些问题: 1. 死锁: ```java // 线程A持有资源1, Myth丶恋晨/ 2024年09月05日 21:05/ 0 赞/ 18 阅读
相关 Java多线程并发问题分析与解决 在Java多线程并发编程中,常见的问题包括: 1. **数据不一致(Race Condition)**:多个线程同时访问和修改共享资源时会出现这种情况。 2. **死锁(D ﹏ヽ暗。殇╰゛Y/ 2024年09月05日 19:06/ 0 赞/ 21 阅读
相关 ThreadLocal解决多线程并发问题 在java程序中,常用的有两种机制来解决多线程并发问题,一种是sychronized方式,通过锁机制,一个线程执行时,让另一个线程等待,是以时间换空间的方式来让多线程串 £神魔★判官ぃ/ 2022年05月28日 22:46/ 0 赞/ 216 阅读
相关 Java 多线程解决并发问题 并发问题,是指在一个时刻内多个线程对一个对象或代码块同时访问读入或取出资源,你争我抢的,就会混乱掉,而不是按部就班,一个一个的去访问读取,就好比人们在旅游的地方上公共厕所,一个 àì夳堔傛蜴生んèń/ 2021年09月20日 17:44/ 0 赞/ 317 阅读
还没有评论,来说两句吧...