【发布时间】:2021-01-30 21:16:07
【问题描述】:
上下文:这是一项任务,所以我不想要完整的解决方案。 我有一个服务器、网络和客户端、交易和帐户类。网络、客户端和服务器都扩展线程。
- Network:Network 类提供了允许 客户端和服务器处理事务。客户和 服务器需要先连接(使用 connect())到网络 交换。 Network 类还实现了一个输入缓冲区 (inComingPacket[]) 和输出缓冲区 (outGoingPacket[]) 分别接收来自客户端的交易并返回 向客户更新交易。这些缓冲区的容量是 10 个元素,因此网络会指示它们是满的还是空的。
- Client:Client 类从文件 (transaction.txt) 中读取所有事务,并 将它们保存在一个数组中(transaction[])。事务由 交易类。 客户端使用 Network 类的 send() 方法传输事务 到网络输入缓冲区,并在网络输入缓冲区的情况下产生 cpu 已满。 此外,客户端使用 Network 类的 receive() 方法检索 从网络输出缓冲区更新事务并产生 cpu 以防万一 缓冲区是空的。收到的每个更新交易都会立即显示 在控制台上。
- Server:Server 类从文件 (account.txt) 中读取所有帐户并保存 它们在一个数组(帐户[])中。帐户由 Accounts 类实现。 服务器使用 Network 类的 transferrIn() 方法检索 来自网络输入缓冲区的事务并执行操作 (取款、存款、查询)特定账户。它会产生 cpu,以防万一 缓冲区为空。 每个更新的事务都使用 Network 类的 transferOut( ) 方法和服务器产生 cpu 以防万一 缓冲区已满。
- 主要的 Driver 类(不可触及):
Network objNetwork = new Network("network");
objNetwork.start();
Server objServer = new Server();
objServer.start();
Client objClient1 = new Client("sending");
objClient1.start();
Client objClient2 = new Client("receiving");
objClient2.start();
网络字段及其构造函数
private static int maxNbPackets;
private static int inputIndexClient, inputIndexServer, outputIndexServer, outputIndexClient; /* Network buffer indices for accessing the input buffer (inputIndexClient, outputIndexServer) and output buffer (inputIndexServer, outputIndexClient) */
private static String clientIP; /* IP number of the client application*/
private static String serverIP; /* IP number of the server application */
private static int portID; /* Port ID of the client application */
private static String clientConnectionStatus; /* Client connection status - connected, disconnected, idle */
private static String serverConnectionStatus; /* Server connection status - connected, disconnected, idle */
private static Transactions inComingPacket[]; /* Incoming network buffer */
private static Transactions outGoingPacket[]; /* Outgoing network buffer */
private static String inBufferStatus, outBufferStatus; /* Current status of the network buffers - normal, full, empty */
private static String networkStatus;
Network(String context)
{
int i;
/* Initialization of the network components */
if (context.equals("network"))
{
System.out.println("\n Activating the network ...");
clientIP = "192.168.2.0";
serverIP = "216.120.40.10";
clientConnectionStatus = "idle";
serverConnectionStatus = "idle";
portID = 0;
maxNbPackets = 10;
inComingPacket = new Transactions[maxNbPackets];
outGoingPacket = new Transactions[maxNbPackets];
for (i=0; i < maxNbPackets; i++)
{ inComingPacket[i] = new Transactions();
outGoingPacket[i] = new Transactions();
}
inBufferStatus = "empty";
outBufferStatus = "empty";
inputIndexClient = 0;
inputIndexServer = 0;
outputIndexServer = 0;
outputIndexClient = 0;
networkStatus = "active";
}
else /* Activate network components for client or server */
System.out.println("\n Activating network components for " + context + "...");
}
服务器字段和构造函数
int numberOfTransactions; /* Number of transactions handled by the server */
int numberOfAccounts; /* Number of accounts stored in the server */
int maxNbAccounts; /* maximum number of transactions */
Transactions transaction; /* Transaction being processed */
Network objNetwork; /* Server object to handle network operations */
Accounts [] account;
Server()
{
System.out.println("\n Initializing the server ...");
numberOfTransactions = 0;
numberOfAccounts = 0;
maxNbAccounts = 100;
transaction = new Transactions();
account = new Accounts[maxNbAccounts];
objNetwork = new Network("server");
System.out.println("\n Inializing the Accounts database ...");
initializeAccounts( );
System.out.println("\n Connecting server to network ...");
if (!(objNetwork.connect(objNetwork.getServerIP())))
{
System.out.println("\n Terminating server application, network unavailable");
System.exit(0);
}
}
我不会给客户上课,因为我想你明白了。我的工作本质上是实现所有这些类的运行功能。但是我看不到他们的线程如何能够像他们需要的那样共享数据,而且我需要考虑并发性。 请给点建议,抱歉这么久。
【问题讨论】:
-
也许你应该告诉你的老师你不知道如何开始,他们应该帮助你。他们为此得到报酬。这个问题对于 Stack Overflow 来说似乎太宽泛了。
-
1) 线程安全的集合,如 LinkedBlockingQueue 等,2) PipedInputStream 等
标签: java multithreading intellij-idea concurrency transactions