读书人

JAVA兑现网络编程之并发编程

发布时间: 2013-04-07 12:50:11 作者: rapoo

JAVA实现网络编程之并发编程

? ?我们运行一下发现balance为4或5,这是个错误的结果,如果一个类的对象在多线程程序中导致竞争状态,则称这个类为线程不安全的。所以这个任务是线程不安全的。

三.用同步完善程序

? ?用互斥锁来实现同步,即在一任务开始执行时加锁,执行完毕后释放锁。在释放锁之前其它任务无法执行。同步完全可以避免竞争状态的产生,但有的时候还需要线程之间的相互合作。

? ?然后增加一个向账户提款(Withdraw)的任务,当余额小于取款数时,等待新存入的存款。

? ?Account类添加

? ?private static Lock lock = new ReentrantLock(); ?//创建一个锁

? ?private static Condition newDeposit = lock.newCondition(); ?//实现一个条件

? ??Account类中应用互斥锁的的方法如下

? ? 而客户端连接上服务器后,创建两个IO流

? ? //IO streams
? ? DataOutputStream toServer?= new DataOutputStream(socket.getOutputStream());

? ? DataInputStream fromServer = new DataInputStream(socket.getInputStream());

?即可传输order(菜单选项)和amount

? ? //Send the order, amount to the server
? ? toServer.writeInt(order);
? ? toServer.writeDouble(amount);
? ? toServer.flush();

? ?最后再读取balance

? ?balance = fromServer.readDouble();

?

?

读书人网 >编程

热点推荐