网络编程的并发问题

来源:互联网 发布:软件自动化测试 编辑:程序博客网 时间:2024/05/18 20:51

风吹山岗

2016-05-29


1.      在socket与serversocket之间收发流有getInputStream()和getOutputStream()

两个类socket、serversocket

三个方法:accept(),getInputStream()和getOutputStream()

 

在socket中,一般getInputStream()和getOutputStream()的方法不要求close,防止出现socket closed的问题。

 

 

2.      多线程并发问题

比如在一个atm系统中,多个操作同时对同一个账户进行取款、转账等操作,就会造成系统紊乱,数据出错。那要怎么办呢?那我们要保证我们在对这个账户进行操作时,数据是正确的,也就是不受干扰的。所以我们要加锁。

首先第一种,加操作锁(synchronized)但是这种锁只能对某一种操作进行加锁,比如转账或者取款,显然这种加锁方式是很不健康的。

第二种加锁方式是文件锁(trylock)。就是在你访问这些操作之前先对文件加锁,在进行操作。其他用户就不能对文件进行操作,只能读取,保证了数据的正确性。但是,这种加锁方式,由于文件是共享的,即在我们的atm例子中,txt数据文件只有一份,所以在对文件加锁的时候,其他用户都不能进行取款转账这些操作,要等某一用户操作完,文件解锁的时候再加锁再操作。所以显然这种加锁方式不仅失去了系统的并发性,而且也是不现实的。

第三种加锁方式特点:“批量,按顺序,写”。首先我们可以在这个txt文件前建一个操作池。用于存储用户对它的操作指令。即建立一个数组,按顺序存储它的指令操作,再按顺序读取指令,不断地循环,使得每个用户都可以随时对它进行操作。有时候指令多时,或者操作池满时,可以对用户先返回提醒消息,显示系统繁忙等消息。所以需要在用户那边有一个死循环,一直向操作池这边访问该指令是否已执行,并返回信息给用户。

 

0 0