多线程死锁的问题有谁遇见过?

[复制链接]
查看11 | 回复8 | 2021-1-27 06:48:26 | 显示全部楼层 |阅读模式
多线程死锁的问题有谁遇见过?
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:48:26 | 显示全部楼层
死锁问题无非就是争夺锁形成循环导致没有一个线程可以方开锁导致死锁具体问题看看你代码

回复

使用道具 举报

千问 | 2021-1-27 06:48:26 | 显示全部楼层

Java多线程之银行ATM实例
http://www.verejava.com/?id=16992914422268
回复

使用道具 举报

千问 | 2021-1-27 06:48:26 | 显示全部楼层
引用1楼qq_41054313的回复:死锁问题无非就是争夺锁形成循环导致没有一个线程可以方开锁导致死锁具体问题看看你代码
org.springframework.dao.CannotAcquireLockException:
###Errorupdatingdatabase.Cause:com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException:Lockwaittimeoutexceeded;tryrestartingtransaction
###TheerrormayinvolvedefaultParameterMap
###Theerroroccurredwhilesettingparameters
###SQL:deletefrommjsxd_payment_repday_detailedwhereba_id=?andfrom_Datas='2'
###Cause:com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException:Lockwaittimeoutexceeded;tryrestartingtransaction
;SQL[];Lockwaittimeoutexceeded;tryrestartingtransaction;nestedexceptioniscom.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException:Lockwaittimeoutexceeded;tryrestartingtransaction
atorg.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:259)~[spring-jdbc-4.3.9.RELEASE.jar:4.3.9.RELEASE]
atorg.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73)~[spring-jdbc-4.3.9.RELEASE.jar:4.3.9.RELEASE]
atorg.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73)~[mybatis-spring-1.3.1.jar:1.3.1]
atorg.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446)~[mybatis-spring-1.3.1.jar:1.3.1]
atcom.sun.proxy.$Proxy68.delete(UnknownSource)~[na:na]
atorg.mybatis.spring.SqlSessionTemplate.delete(SqlSessionTemplate.java:310)~[mybatis-spring-1.3.1.jar:1.3.1]
atorg.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:67)~[mybatis-3.4.4.jar:3.4.4]
atorg.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59)~[mybatis-3.4.4.jar:3.4.4]
atcom.sun.proxy.$Proxy108.deleteByBachId(UnknownSource)~[na:na]
atcom.mjs.bigdata.antifraud.service.MjsxdPaymentRepdayDetailedServiceImpl.deleteByBachId(MjsxdPaymentRepdayDetailedServiceImpl.java:95)~[rc-servant-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT]
atcom.mjs.bigdata.antifraud.service.MjsxdPaymentRepdayDetailedServiceImpl$$FastClassBySpringCGLIB$$9e1cb3f4.invoke()~[rc-servant-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT]
atorg.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)~[spring-core-4.3.9.RELEASE.jar:4.3.9.RELEASE]
atorg.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:738)~[spring-aop-4.3.9.RELEASE.jar:4.3.9.RELEASE]
atorg.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)[spring-aop-4.3.9.RELEASE.jar:4.3.9.RELEASE]
atorg.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:85)~[spring-aop-4.3.9.RELEASE.jar:4.3.9.RELEASE]
atcom.mjs.bigdata.antifraud.tool.ExecutionChainAspect.processServiceMethod(ExecutionChainAspect.java:132)~[classes/:0.0.1-SNAPSHOT]
atsun.reflect.GeneratedMethodAccessor216.invoke(UnknownSource)~[na:na]
atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)~[na:1.8.0_91]
atjava.lang.reflect.Method.invoke(Method.java:498)~[na:1.8.0_91]
atorg.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:629)[spring-aop-4.3.9.RELEASE.jar:4.3.9.RELEASE]
atorg.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:618)[spring-aop-4.3.9.RELEASE.jar:4.3.9.RELEASE]
atorg.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)[spring-aop-4.3.9.RELEASE.jar:4.3.9.RELEASE]
atorg.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)[spring-aop-4.3.9.RELEASE.jar:4.3.9.RELEASE]
atorg.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)[spring-aop-4.3.9.RELEASE.jar:4.3.9.RELEASE]
atorg.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)[spring-aop-4.3.9.RELEASE.jar:4.3.9.RELEASE]
atorg.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:673)[spring-aop-4.3.9.RELEASE.jar:4.3.9.RELEASE]
atcom.mjs.bigdata.antifraud.service.MjsxdPaymentRepdayDetailedServiceImpl$$EnhancerBySpringCGLIB$$c697f796.deleteByBachId()[rc-servant-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT]
atcom.mjs.bigdata.antifraud.controller.taskJob.DZjob.checkAction(DZjob.java:102)[classes/:0.0.1-SNAPSHOT]
atcom.mjs.bigdata.antifraud.controller.taskJob.DZjob.run(DZjob.java:479)[classes/:0.0.1-SNAPSHOT]
atjava.lang.Thread.run(Thread.java:745)[na:1.8.0_91]
Causedby:com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException:Lockwaittimeoutexceeded;tryrestartingtransaction
atsun.reflect.NativeConstructorAccessorImpl.newInstance0(NativeMethod)~[na:1.8.0_91]
atsun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)~[na:1.8.0_91]
atsun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)~[na:1.8.0_91]
atjava.lang.reflect.Constructor.newInstance(Constructor.java:423)~[na:1.8.0_91]
atcom.mysql.jdbc.Util.handleNewInstance(Util.java:425)~[mysql-connector-java-5.1.42.jar:5.1.42]
atcom.mysql.jdbc.Util.getInstance(Util.java:408)~[mysql-connector-java-5.1.42.jar:5.1.42]
atcom.mysql.jdbc.SQLError.createSQLException(SQLError.java:951)~[mysql-connector-java-5.1.42.jar:5.1.42]
atcom.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)~[mysql-connector-java-5.1.42.jar:5.1.42]
atcom.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)~[mysql-connector-java-5.1.42.jar:5.1.42]
atcom.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)~[mysql-connector-java-5.1.42.jar:5.1.42]
atcom.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)~[mysql-connector-java-5.1.42.jar:5.1.42]
atcom.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2490)~[mysql-connector-java-5.1.42.jar:5.1.42]
atcom.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)~[mysql-connector-java-5.1.42.jar:5.1.42]
atcom.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1197)~[mysql-connector-java-5.1.42.jar:5.1.42]
atcom.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:493)~[druid-1.1.0.jar:1.1.0]
atorg.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:46)~[mybatis-3.4.4.jar:3.4.4]
atorg.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:74)~[mybatis-3.4.4.jar:3.4.4]
atorg.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50)~[mybatis-3.4.4.jar:3.4.4]
atorg.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)~[mybatis-3.4.4.jar:3.4.4]
atorg.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76)~[mybatis-3.4.4.jar:3.4.4]
atorg.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:198)~[mybatis-3.4.4.jar:3.4.4]
atorg.apache.ibatis.session.defaults.DefaultSqlSession.delete(DefaultSqlSession.java:213)~[mybatis-3.4.4.jar:3.4.4]
atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)~[na:1.8.0_91]
atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)~[na:1.8.0_91]
atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)~[na:1.8.0_91]
atjava.lang.reflect.Method.invoke(Method.java:498)~[na:1.8.0_91]
atorg.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:433)~[mybatis-spring-1.3.1.jar:1.3.1]
...26commonframesomitted
Exceptioninthread"Thread-12"java.lang.StringIndexOutOfBoundsException:Stringindexoutofrange:200
atjava.lang.String.substring(String.java:1963)
atcom.mjs.bigdata.antifraud.controller.taskJob.DZjob.checkAction(DZjob.java:218)
atcom.mjs.bigdata.antifraud.controller.taskJob.DZjob.run(DZjob.java:479)
atjava.lang.Thread.run(Thread.java:745)

回复

使用道具 举报

千问 | 2021-1-27 06:48:26 | 显示全部楼层
一般根据所操作的内容设置一下锁超时,到时间直接释放
回复

使用道具 举报

千问 | 2021-1-27 06:48:26 | 显示全部楼层
死锁就是多个线程出现互相等待的情况.
回复

使用道具 举报

千问 | 2021-1-27 06:48:26 | 显示全部楼层
上面的回答都是什么鬼,当然都知道什么是死锁,掏出你的代码看一下具体问题
回复

使用道具 举报

千问 | 2021-1-27 06:48:26 | 显示全部楼层
给你个最容易死锁的类,CountDownLatch,这个类是用来解决线程多并发的(新手了解死锁最直观的类)。
CountDownLatchcdl=newCountDownLatch(2);//创建实例时定义锁的次数
cdl.await();//让当前线程等待
cdl.countDown();//每次减少锁的次数
只有当你锁的次数减到0的的之后,之前设置等待的线程才会获得执行的机会。你可以最直观的了解到死锁。
死锁的定义就是:两个或者两个以上的线程都相互等待,一直得不到执行的机会!

回复

使用道具 举报

千问 | 2021-1-27 06:48:26 | 显示全部楼层
我是刚刚入门的,我都没听过你们说的是啥呢.hahah
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行