Java完成三个类 分别是 统计 status 网站 website 用户 user 其中 统计类status是static静态类 实现: 用户可以访问网站,提交用户名 网站统计总访问量和登录名列表 用户统计自己的登录次数 生成n个用户,每个用户拥有自己的用户名 执行m轮,每次随机挑选一个用户,该用户执行下列命令一次: 如果没有登录,那么登录 如果已经登录了,并且已经经过k个轮次,那么登出 否则什么都不做
时间: 2023-09-09 19:13:29 浏览: 39
下面是代码实现:
1. 统计类 Status:
```java
public class Status {
private static int totalVisits = 0;
private static List<String> loginNames = new ArrayList<>();
public static synchronized void addVisit() {
totalVisits++;
}
public static synchronized void addLoginName(String name) {
loginNames.add(name);
}
public static synchronized int getTotalVisits() {
return totalVisits;
}
public static synchronized List<String> getLoginNames() {
return loginNames;
}
}
```
2. 网站类 Website:
```java
import java.util.Random;
public class Website {
private static final int N_USERS = 10;
private static final int M_ROUNDS = 20;
private static final int K_LOGOUT_DELAY = 5;
private static final Random rand = new Random();
public static void main(String[] args) throws InterruptedException {
Thread[] threads = new Thread[N_USERS];
User[] users = new User[N_USERS];
for (int i = 0; i < N_USERS; i++) {
String username = "User" + (i + 1);
users[i] = new User(username);
threads[i] = new Thread(users[i]);
threads[i].start();
}
for (int round = 1; round <= M_ROUNDS; round++) {
int userIndex = rand.nextInt(N_USERS);
users[userIndex].performAction(K_LOGOUT_DELAY, round);
Thread.sleep(1000);
}
for (Thread t : threads) {
t.join();
}
System.out.println("Total visits: " + Status.getTotalVisits());
System.out.println("Login names: " + Status.getLoginNames());
}
}
```
3. 用户类 User:
```java
public class User implements Runnable {
private final String username;
private int loginCount;
public User(String username) {
this.username = username;
}
public void performAction(int logoutDelay, int round) {
synchronized (this) {
if (loginCount == 0) {
login();
} else if (round - loginCount >= logoutDelay) {
logout();
}
}
}
private void login() {
Status.addVisit();
Status.addLoginName(username);
loginCount++;
System.out.println(username + " logged in. Total visits: " + Status.getTotalVisits());
}
private void logout() {
loginCount = 0;
System.out.println(username + " logged out.");
}
@Override
public void run() {
// do nothing
}
}
```
这个程序模拟了一个简单的网站,包含一个统计类,一个网站类和一个用户类。在网站类中,我们创建了一些用户,并模拟了多轮操作,每轮中随机选择一个用户执行下列命令中的一个:如果没有登录,那么登录;如果已经登录了,并且已经经过k个轮次,那么登出;否则什么都不做。在用户类中,我们实现了登录和登出方法,并更新了统计信息。同时,在用户类中,我们使用了 synchronized 关键字来确保线程安全。最后,在网站类中,我们输出了总访问量和登录名列表。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)