java 线程死锁

问题描述

publicvoidrun(){for(TlcLogStddelivertable:listTable){System.out.println("正在传送当前第"+DatatransfersBo.n+"条数据");System.out.println("手机号---------"+table.getVc2srcmobile());System.out.println("手机内容"+table.getVc2messagecontent());//数据库存在乱码,手机号为空,手机内容为空更新状态值为1if(MessyCodeCheck.isMessyCode(table.getVc2messagecontent())||null==table.getVc2srcmobile()||""==table.getVc2srcmobile()||null==table.getVc2messagecontent()||""==table.getVc2messagecontent()){getDao().update("updateTlcLogStddeliversetproStatus='1'wherenumseqid=?",newObject[]{table.getNumseqid()});DatatransfersBo.n++;//更新状态值为1}//手机内容为XA开始的if(null!=table.getVc2messagecontent()&&table.getVc2messagecontent().length()>5&&table.getVc2messagecontent().substring(0,2).equals(DatatransfersBo.C1)&&table.getProStatus().equals("0")){StringXAURL=ConfigUtil.getConfig().getString(ConfigUtil.XA_URL_PATH);//URL传参服务器返回状态值Stringstate=DatatransfersBo.handlerSendURL("m="+URLEncoder.encode(table.getVc2srcmobile())+"&c="+URLEncoder.encode(table.getVc2messagecontent().substring(table.getVc2messagecontent().lastIndexOf('/')+1)).replaceAll("\+","%20")+"",XAURL);//判断返回状态如果为OK则更新表状态为1if(state.equals(DatatransfersBo.SUCCESS)){getDao().update("updateTlcLogStddeliversetproStatus='1'wherenumseqid=?",newObject[]{table.getNumseqid()});DatatransfersBo.n++;}else{System.out.println("服务器接收失败");//重新传DatatransfersBo.i--;}}//手机内容为XZ开始的将状态置为1if(null!=table.getVc2messagecontent()&&table.getVc2messagecontent().length()>5&&table.getVc2messagecontent().substring(0,2).equals(DatatransfersBo.C3)){getDao().update("updateTlcLogStddeliversetproStatus='1'wherenumseqid=?",newObject[]{table.getNumseqid()});DatatransfersBo.n++;}//内容为XB开始的将状态置为1if(null!=table.getVc2messagecontent()&&table.getVc2messagecontent().length()>5&&table.getVc2messagecontent().substring(0,2).equals(DatatransfersBo.C2)&&table.getProStatus().equals("0")){StringXBURL=ConfigUtil.getConfig().getString(ConfigUtil.XB_URL_PATH);//URL传参返回状态值Stringstate=DatatransfersBo.handlerSendURL("m="+URLEncoder.encode(table.getVc2srcmobile())+"&c="+URLEncoder.encode(table.getVc2messagecontent().substring(table.getVc2messagecontent().lastIndexOf('/')+1)).replaceAll("\+","%20")+"",XBURL);//判断返回状态如果为OK则更新表状态为1if(state.equals(DatatransfersBo.SUCCESS)){getDao().update("updateTlcLogStddeliversetproStatus='1'wherenumseqid=?",newObject[]{table.getNumseqid()});DatatransfersBo.n++;}else{System.out.println("服务器接收失败");//重新传DatatransfersBo.i--;}}DatestartDate=newDate();DateendDate=newDate();System.out.println("结束时间:"+(newSimpleDateFormat("HH:mm:ss").format(endDate)));System.out.println("总共用多少时间"+(endDate.getTime()-DatatransfersBo.startDate.getTime())/1000+"(秒)");}}调用它的时候是并行十个线程,然后在这里有不同的IF,还有数据库更新逻辑,如果我现在不用册步,也不用锁,会出现死锁情况吗?

时间: 2024-09-20 13:41:41

java 线程死锁的相关文章

java的线程死锁

由于线程可能进入堵塞状态,而且由于对象可能拥有"同步"方法--除非同步锁定被解除,否则线程不能访问那个对象--所以一个线程完全可能等候另一个对象,而另一个对象又在等候下一个对象,以此类推.这个"等候"链最可怕的情形就是进入封闭状态--最后那个对象等候的是第一个对象!此时,所有线程都会陷入无休止的相互等待状态,大家都动弹不得.我们将这种情况称为"死锁".尽管这种情况并非经常出现,但一旦碰到,程序的调试将变得异常艰难. 就语言本身来说,尚未直接提供防

java模拟线程死锁

  /* java线程死锁的模拟 两个线程同时请求对方的对方释放监视对象 造成死锁 请在 虚拟机 单核下运行 */ class  Test  {  public static void main(String []args)  throws Exception    {      ThreadOne td=new ThreadOne();      new Thread(td).start();      Thread.sleep(3);      new Thread(td).start();

Java 多线程 死锁 隐性死锁 数据竞争 恶性数据竞争 错误解决深入分析 全方向举例

在几乎所有编程语言中,由于多线程引发的错误都有着难以再现的特点,程序的死锁或其它多线程错误可能只在某些特殊的情形下才出现,或在不同的VM上运行同一个程序时错误表现不同.因此,在编写多线程程序时,事先认识和防范可能出现的错误特别重要.无论是客户端还是服务器端多线程Java程序,最常见的多线程问题包括死锁.隐性死锁和数据竞争. Java线程死锁如何避免这一悲剧  Java线程死锁需要如何解决,这个问题一直在我们不断的使用中需要只有不断的关键.不幸的是,使用上锁会带来其他问题.让我们来看一些常见问题以

Java线程:并发协作-死锁

发生死锁的原因一般是两个对象的锁相互等待造成的. 在<Java线程:线程的同步与锁>一文中,简述死锁的概念与简单例子,但是所给的例子是不完整的,这里给出一个完整的例子. /** * Java线程:并发协作-死锁 * * @author Administrator */ public class Test { public static void main(String[] args) { DeadlockRisk dead = new DeadlockRisk(); MyThread t1 =

java 进程死锁-java 模拟线程死锁实验

问题描述 java 模拟线程死锁实验 我想两个线程一直在售票知道票卖光,但是用while()控制循环后出现 售票2进入共享区 当前没有车票可以出售! 售票2进入共享区 当前没有车票可以出售! 售票2进入共享区 ..... 具体代码如下 package com; public class SaleThread extends Thread{ private String name; ShareResource shareresource; public SaleThread(){} public

java线程同步 死锁问题

问题描述 java线程同步 死锁问题 写了一个java中线程同步的死锁问题,但是输出结果就是不对,劳烦前辈指点指点.源代码如下: public class TestDeadLock implements Runnable{ public static int flag = 1; static Object o1 = new Object(); static Object o2 = new Object(); public void run(){ System.out.println(""

Java线程模型缺陷研究

Java 编程语言的线程模型可能是此语言中最薄弱的部分.它完全不适合实际复杂程序的要求,而且也完全不是面向对象的.本文建议对 Java 语言进行重大修改和补充,以解决这些问题. Java 语言的线程模型是此语言的一个最难另人满意的部分.尽管 Java 语言本身就支持线程编程是件好事,但是它对线程的语法和类包的支持太少,只能适用于极小型的应用环境. 关于 Java 线程编程的大多数书籍都长篇累牍地指出了 Java 线程模型的缺陷,并提供了解决这些问题的急救包(Band-Aid/邦迪创可贴)类库.我

Java线程的深入探讨

一般来说,我们把正在计算机中执行的程序叫做"进程"(Process) ,而不将其 称为程序(Program).所谓"线程"(Thread),是"进程"中某个单一顺序的控制流. 新兴的操作系统,如Mac,Windows NT,Windows 95等,大多采用多线程的概念,把线 程视为基本执行单位.线程也是Java中的相当重要的组成部分之一. 甚至最简单的Applet也是由多个线程来完成的.在Java中,任何一个Applet的 paint()和upd

Java线程机制(三) synchronized和volatile的使用

现在开始进入线程编程中最重要的话题---数据同步,它是线程编程的核心,也是难点,就算我们理解了 数据同步的基本原理,但是我们也无法保证能够写出正确的同步代码,但基本原理是必须掌握的. 要 想理解数据同步的基本原理,首先就要明白,为什么我们要数据同步? public class CharacterDisplayCanvas extends JComponent implements CharacterListener { protected FontMetrics fm; protected ch