我通过两个线程,A,B去读取表里的数据进行短信发送操作
正常情况应该是:A线程发送短信,并且向表C里写入短信的发送情况成功用OK,错误用ER表示.
接下来B线程读取C表里的数据,取出短信发送失败的数据即ER的情况,然后再把ER的数据进行短信重发.
如果通过主线程中A.join()即,等A的数据发送完成后再进行B的线程应该是没问题的.但是,如果发送的短信数据多了后,等界面点击了提交按钮后,会等待A线程完成后,程序才会向下走.但是这个等待时间可能时间很长.对用户来说,不太好.怎么样去进行改正呢?即:不让用户等这么长的时间,而且能首次发短信,并且在发送完成后自动 的去表C里读取错误的记录再次进行重发一次?如果A,B两个线程同时进行,会出现线程数据的同步问题,大家有什么好的解决方法吗?

解决方案 »

  1.   

    如果我不通过A.join()等A线程结束,
    则B线程会读取C中的发送记录,如果A没有结束,还未写入结果至C中,则B线程读取不到发送失败记录或者是读取到的记录不准确,那样进行重发是不对的.
      

  2.   

    四种方式    sychronized关键字
    sychronized method(){} 
    sychronized (objectReference) {/*block*/} 
    static synchronized method(){} 
    sychronized(classname.class)
    其中1和2是代表锁当前对象,即一个对象就一个锁,3和4代表锁这个类,即这个类的锁
    要注意的是sychronized method()不是锁这个函数,而是锁对象,即:如果这个类中有两个方法都是sychronized,那么只要有两个线程共享一个该类的reference,每个调用这两个方法之一,不管是否同一个方法,都会用这个对象锁进行同步。锁类的3和4类推,即该类的不同reference调用了sychronized区段的咚咚就会受类锁的控制还有,如果两个函数调用的先后顺序不能被打断,那么可以有个专门的锁对象来完成这个任务:
    class MyLock
    {
          synchronized getLock()
          {
              //####还没写完
          }
    }