From 1f42e790611c70cf6597300ed43c7fa02c1d3eaf Mon Sep 17 00:00:00 2001 From: Launchcore Date: Thu, 6 Nov 2025 10:32:28 +0800 Subject: [PATCH] Initial commit --- .gitignore | 204 ++++++++++++++ Classwork/.gitignore | 29 ++ Classwork/.idea/.gitignore | 8 + Classwork/.idea/misc.xml | 5 + Classwork/.idea/modules.xml | 8 + Classwork/.idea/vcs.xml | 4 + Classwork/Classwork.iml | 11 + Classwork/src/Bank/Bank.java | 40 +++ Classwork/src/Bank/ClientThread.java | 17 ++ Classwork/src/Bank/MainTest.java | 15 ++ Classwork/src/Buffer/BufferCreateIO.java | 45 ++++ Classwork/src/Buffer/BufferOperation.java | 24 ++ Classwork/src/Data/Data.java | 56 ++++ Classwork/src/Data/Main.java | 40 +++ Classwork/src/Data/ReaderThread.java | 24 ++ Classwork/src/Data/WriterThread.java | 37 +++ Classwork/src/DataLimited/Data.java | 63 +++++ Classwork/src/DataLimited/Main.java | 40 +++ Classwork/src/DataLimited/ReaderThread.java | 24 ++ Classwork/src/DataLimited/WriterThread.java | 37 +++ .../ProducerConsumer/extthread/ThreadC.java | 19 ++ .../ProducerConsumer/extthread/ThreadP.java | 19 ++ .../service/RepastService.java | 94 +++++++ .../src/ProducerConsumer/test/run/Run.java | 24 ++ Classwork/src/Race/TortoiseHareRace.java | 88 ++++++ .../src/RedPacket/AICRedPacketGrabber.java | 78 ++++++ .../src/RedPacket/CFRedPacketGrabber.java | 91 +++++++ .../src/RedPacket/LambdaRedPacketGrabber.java | 82 ++++++ .../RedPacket/OrderedRedPacketGrabber.java | 76 ++++++ .../src/RedPacket/RandomRedPacketGrabber.java | 67 +++++ .../RedPacket/ThreadPoolRedPacketGrabber.java | 88 ++++++ Final/.gitignore | 29 ++ Final/.idea/.gitignore | 10 + Final/.idea/misc.xml | 6 + Final/.idea/modules.xml | 8 + Final/.idea/uiDesigner.xml | 124 +++++++++ Final/.idea/vcs.xml | 4 + Final/Final.iml | 11 + Final/src/aio/AIOChatClient.java | 108 ++++++++ Final/src/aio/AIOChatServer.java | 127 +++++++++ Final/src/aio/AsyncQueueDemo.java | 96 +++++++ Final/src/multi_thread/AlternatingPrint.java | 47 ++++ .../src/multi_thread/CountDownLatchDemo.java | 43 +++ .../src/multi_thread/ExecutorServiceDemo.java | 55 ++++ Final/src/multi_thread/ProducerConsumer.java | 74 +++++ Final/src/multi_thread/StaticSyncCounter.java | 26 ++ Final/src/nio/NioChatClient.java | 87 ++++++ Final/src/nio/NioChatServer.java | 109 ++++++++ Final/src/nio/NioHttpServer.java | 84 ++++++ Homework0520/.gitignore | 29 ++ Homework0520/.idea/.gitignore | 10 + Homework0520/.idea/misc.xml | 6 + Homework0520/.idea/modules.xml | 8 + Homework0520/.idea/vcs.xml | 4 + Homework0520/Homework0520.iml | 11 + Homework0520/src/BufferBasicOperations.java | 62 +++++ Homework0520/src/BufferFlipCompact.java | 65 +++++ Homework0520/src/BufferMarkInvalid.java | 105 ++++++++ Homework0520/src/BufferMarkReset.java | 95 +++++++ Homework0520/src/BufferMarkerReader.java | 163 +++++++++++ .../src/BufferVerificationAndThinking.java | 245 +++++++++++++++++ Homework0520/src/TicketSystem.java | 142 ++++++++++ NIOChatServ/.gitignore | 29 ++ NIOChatServ/.idea/.gitignore | 10 + NIOChatServ/.idea/misc.xml | 6 + NIOChatServ/.idea/modules.xml | 8 + NIOChatServ/.idea/vcs.xml | 4 + NIOChatServ/NIOChatServ.iml | 11 + NIOChatServ/src/client/NioChatClient.java | 255 ++++++++++++++++++ NIOChatServ/src/server/NioChatServer.java | 153 +++++++++++ example_src/.gitignore | 29 ++ example_src/.idea/.gitignore | 8 + example_src/.idea/misc.xml | 5 + example_src/.idea/modules.xml | 8 + example_src/.idea/vcs.xml | 4 + example_src/Network_Communication.iml | 11 + example_src/src/Bus.java | 24 ++ example_src/src/MyDemo1.java | 18 ++ example_src/src/MyInterface2.java | 3 + example_src/src/MyPay.java | 13 + example_src/src/MyTest1.java | 23 ++ example_src/src/Test1.java | 32 +++ example_src/src/Test2.java | 14 + example_src/src/Test3.java | 39 +++ example_src/src/abc/C1.java | 21 ++ example_src/src/abc/PrintCH.java | 14 + example_src/src/hk1/hk1.iml | 11 + example_src/src/hk1/src/demo1/MainTest.java | 18 ++ example_src/src/hk1/src/demo1/MyThread1.java | 19 ++ example_src/src/hk1/src/demo1/MyThread2.java | 16 ++ example_src/src/hk2/hk2.iml | 11 + example_src/src/hk2/src/Main.java | 5 + example_src/src/pk1/MyTest.java | 22 ++ example_src/src/pk1/pk2/MyThread1.java | 49 ++++ onetoone/.gitignore | 29 ++ onetoone/.idea/.gitignore | 10 + onetoone/.idea/misc.xml | 5 + onetoone/.idea/modules.xml | 8 + onetoone/.idea/runConfigurations/MyClient.xml | 9 + onetoone/.idea/runConfigurations/MyServer.xml | 9 + onetoone/.idea/uiDesigner.xml | 124 +++++++++ onetoone/.idea/vcs.xml | 4 + onetoone/onetoone.iml | 11 + onetoone/src/ClientThread.java | 63 +++++ onetoone/src/MyClient.form | 151 +++++++++++ onetoone/src/MyClient.java | 118 ++++++++ onetoone/src/MyServer.form | 107 ++++++++ onetoone/src/MyServer.java | 110 ++++++++ 物联网234 张顾皓 2330110900 第一次作业.docx | Bin 0 -> 62135 bytes 物联网234 张顾皓 2330110900 第三次作业.docx | Bin 0 -> 103420 bytes 物联网234 张顾皓 2330110900 第二次作业.docx | Bin 0 -> 52752 bytes ...4班 2330110900号 张顾皓 期末考核作业2025.docx | Bin 0 -> 136815 bytes 112 files changed, 5101 insertions(+) create mode 100644 .gitignore create mode 100644 Classwork/.gitignore create mode 100644 Classwork/.idea/.gitignore create mode 100644 Classwork/.idea/misc.xml create mode 100644 Classwork/.idea/modules.xml create mode 100644 Classwork/.idea/vcs.xml create mode 100644 Classwork/Classwork.iml create mode 100644 Classwork/src/Bank/Bank.java create mode 100644 Classwork/src/Bank/ClientThread.java create mode 100644 Classwork/src/Bank/MainTest.java create mode 100644 Classwork/src/Buffer/BufferCreateIO.java create mode 100644 Classwork/src/Buffer/BufferOperation.java create mode 100644 Classwork/src/Data/Data.java create mode 100644 Classwork/src/Data/Main.java create mode 100644 Classwork/src/Data/ReaderThread.java create mode 100644 Classwork/src/Data/WriterThread.java create mode 100644 Classwork/src/DataLimited/Data.java create mode 100644 Classwork/src/DataLimited/Main.java create mode 100644 Classwork/src/DataLimited/ReaderThread.java create mode 100644 Classwork/src/DataLimited/WriterThread.java create mode 100644 Classwork/src/ProducerConsumer/extthread/ThreadC.java create mode 100644 Classwork/src/ProducerConsumer/extthread/ThreadP.java create mode 100644 Classwork/src/ProducerConsumer/service/RepastService.java create mode 100644 Classwork/src/ProducerConsumer/test/run/Run.java create mode 100644 Classwork/src/Race/TortoiseHareRace.java create mode 100644 Classwork/src/RedPacket/AICRedPacketGrabber.java create mode 100644 Classwork/src/RedPacket/CFRedPacketGrabber.java create mode 100644 Classwork/src/RedPacket/LambdaRedPacketGrabber.java create mode 100644 Classwork/src/RedPacket/OrderedRedPacketGrabber.java create mode 100644 Classwork/src/RedPacket/RandomRedPacketGrabber.java create mode 100644 Classwork/src/RedPacket/ThreadPoolRedPacketGrabber.java create mode 100644 Final/.gitignore create mode 100644 Final/.idea/.gitignore create mode 100644 Final/.idea/misc.xml create mode 100644 Final/.idea/modules.xml create mode 100644 Final/.idea/uiDesigner.xml create mode 100644 Final/.idea/vcs.xml create mode 100644 Final/Final.iml create mode 100644 Final/src/aio/AIOChatClient.java create mode 100644 Final/src/aio/AIOChatServer.java create mode 100644 Final/src/aio/AsyncQueueDemo.java create mode 100644 Final/src/multi_thread/AlternatingPrint.java create mode 100644 Final/src/multi_thread/CountDownLatchDemo.java create mode 100644 Final/src/multi_thread/ExecutorServiceDemo.java create mode 100644 Final/src/multi_thread/ProducerConsumer.java create mode 100644 Final/src/multi_thread/StaticSyncCounter.java create mode 100644 Final/src/nio/NioChatClient.java create mode 100644 Final/src/nio/NioChatServer.java create mode 100644 Final/src/nio/NioHttpServer.java create mode 100644 Homework0520/.gitignore create mode 100644 Homework0520/.idea/.gitignore create mode 100644 Homework0520/.idea/misc.xml create mode 100644 Homework0520/.idea/modules.xml create mode 100644 Homework0520/.idea/vcs.xml create mode 100644 Homework0520/Homework0520.iml create mode 100644 Homework0520/src/BufferBasicOperations.java create mode 100644 Homework0520/src/BufferFlipCompact.java create mode 100644 Homework0520/src/BufferMarkInvalid.java create mode 100644 Homework0520/src/BufferMarkReset.java create mode 100644 Homework0520/src/BufferMarkerReader.java create mode 100644 Homework0520/src/BufferVerificationAndThinking.java create mode 100644 Homework0520/src/TicketSystem.java create mode 100644 NIOChatServ/.gitignore create mode 100644 NIOChatServ/.idea/.gitignore create mode 100644 NIOChatServ/.idea/misc.xml create mode 100644 NIOChatServ/.idea/modules.xml create mode 100644 NIOChatServ/.idea/vcs.xml create mode 100644 NIOChatServ/NIOChatServ.iml create mode 100644 NIOChatServ/src/client/NioChatClient.java create mode 100644 NIOChatServ/src/server/NioChatServer.java create mode 100644 example_src/.gitignore create mode 100644 example_src/.idea/.gitignore create mode 100644 example_src/.idea/misc.xml create mode 100644 example_src/.idea/modules.xml create mode 100644 example_src/.idea/vcs.xml create mode 100644 example_src/Network_Communication.iml create mode 100644 example_src/src/Bus.java create mode 100644 example_src/src/MyDemo1.java create mode 100644 example_src/src/MyInterface2.java create mode 100644 example_src/src/MyPay.java create mode 100644 example_src/src/MyTest1.java create mode 100644 example_src/src/Test1.java create mode 100644 example_src/src/Test2.java create mode 100644 example_src/src/Test3.java create mode 100644 example_src/src/abc/C1.java create mode 100644 example_src/src/abc/PrintCH.java create mode 100644 example_src/src/hk1/hk1.iml create mode 100644 example_src/src/hk1/src/demo1/MainTest.java create mode 100644 example_src/src/hk1/src/demo1/MyThread1.java create mode 100644 example_src/src/hk1/src/demo1/MyThread2.java create mode 100644 example_src/src/hk2/hk2.iml create mode 100644 example_src/src/hk2/src/Main.java create mode 100644 example_src/src/pk1/MyTest.java create mode 100644 example_src/src/pk1/pk2/MyThread1.java create mode 100644 onetoone/.gitignore create mode 100644 onetoone/.idea/.gitignore create mode 100644 onetoone/.idea/misc.xml create mode 100644 onetoone/.idea/modules.xml create mode 100644 onetoone/.idea/runConfigurations/MyClient.xml create mode 100644 onetoone/.idea/runConfigurations/MyServer.xml create mode 100644 onetoone/.idea/uiDesigner.xml create mode 100644 onetoone/.idea/vcs.xml create mode 100644 onetoone/onetoone.iml create mode 100644 onetoone/src/ClientThread.java create mode 100644 onetoone/src/MyClient.form create mode 100644 onetoone/src/MyClient.java create mode 100644 onetoone/src/MyServer.form create mode 100644 onetoone/src/MyServer.java create mode 100644 物联网234 张顾皓 2330110900 第一次作业.docx create mode 100644 物联网234 张顾皓 2330110900 第三次作业.docx create mode 100644 物联网234 张顾皓 2330110900 第二次作业.docx create mode 100644 物联网234班 2330110900号 张顾皓 期末考核作业2025.docx diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1b618d4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,204 @@ +### Intellij ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# SonarLint plugin +.idea/sonarlint/ + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### Intellij Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 + +# *.iml +# modules.xml +# .idea/misc.xml +# *.ipr + +# Sonarlint plugin +# https://plugins.jetbrains.com/plugin/7973-sonarlint +.idea/**/sonarlint/ + +# SonarQube Plugin +# https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin +.idea/**/sonarIssues.xml + +# Markdown Navigator plugin +# https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced +.idea/**/markdown-navigator.xml +.idea/**/markdown-navigator-enh.xml +.idea/**/markdown-navigator/ + +# Cache file creation bug +# See https://youtrack.jetbrains.com/issue/JBR-2257 +.idea/$CACHE_FILE$ + +# CodeStream plugin +# https://plugins.jetbrains.com/plugin/12206-codestream +.idea/codestream.xml + +# Azure Toolkit for IntelliJ plugin +# https://plugins.jetbrains.com/plugin/8053-azure-toolkit-for-intellij +.idea/**/azureSettings.xml + +### Java ### +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* +replay_pid* + +### MicrosoftOffice ### +*.tmp + +# Word temporary +~$*.doc* + +# Word Auto Backup File +Backup of *.doc* + +# Excel temporary +~$*.xls* + +# Excel Backup File +*.xlk + +# PowerPoint temporary +~$*.ppt* + +# Visio autosave temporary files +*.~vsd* + +### VisualStudioCode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/*.code-snippets + +# Local History for Visual Studio Code +.history/ + +# Built Visual Studio Code Extensions +*.vsix + +### VisualStudioCode Patch ### +# Ignore all local history of files +.history +.ionide + +### Windows ### +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk \ No newline at end of file diff --git a/Classwork/.gitignore b/Classwork/.gitignore new file mode 100644 index 0000000..f68d109 --- /dev/null +++ b/Classwork/.gitignore @@ -0,0 +1,29 @@ +### IntelliJ IDEA ### +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/Classwork/.idea/.gitignore b/Classwork/.idea/.gitignore new file mode 100644 index 0000000..35410ca --- /dev/null +++ b/Classwork/.idea/.gitignore @@ -0,0 +1,8 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/Classwork/.idea/misc.xml b/Classwork/.idea/misc.xml new file mode 100644 index 0000000..5af9c98 --- /dev/null +++ b/Classwork/.idea/misc.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Classwork/.idea/modules.xml b/Classwork/.idea/modules.xml new file mode 100644 index 0000000..630893a --- /dev/null +++ b/Classwork/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/Classwork/.idea/vcs.xml b/Classwork/.idea/vcs.xml new file mode 100644 index 0000000..d843f34 --- /dev/null +++ b/Classwork/.idea/vcs.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Classwork/Classwork.iml b/Classwork/Classwork.iml new file mode 100644 index 0000000..c90834f --- /dev/null +++ b/Classwork/Classwork.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Classwork/src/Bank/Bank.java b/Classwork/src/Bank/Bank.java new file mode 100644 index 0000000..30d8b1b --- /dev/null +++ b/Classwork/src/Bank/Bank.java @@ -0,0 +1,40 @@ +package Bank; + +public class Bank { + private int money; + private String name; + + public Bank(String name, int money) { + this.name = name; + this.money = money; + } + + public synchronized void deposit(int m) { + money += m; + } + + public synchronized boolean withdraw(int m) { + if (money >= m) { + money -= m; + check(); + return true; + } else { + return false; + } + } + + public String getName() { + return name; + } + + private void check() { + if (money < 0) { + System.out.println("可用余额为负数,money=" + money); + } + /* + else { + System.out.println("money=" + money); + } + */ + } +} diff --git a/Classwork/src/Bank/ClientThread.java b/Classwork/src/Bank/ClientThread.java new file mode 100644 index 0000000..49c07c5 --- /dev/null +++ b/Classwork/src/Bank/ClientThread.java @@ -0,0 +1,17 @@ +package Bank; + +public class ClientThread extends Thread{ + private Bank bank; + public ClientThread(Bank bank) { + this.bank = bank; + } + @Override + public void run(){ + while (true){ + boolean ok=bank.withdraw(1000); + if(ok){ + bank.deposit(1000); + } + } + } +} \ No newline at end of file diff --git a/Classwork/src/Bank/MainTest.java b/Classwork/src/Bank/MainTest.java new file mode 100644 index 0000000..10c7f4a --- /dev/null +++ b/Classwork/src/Bank/MainTest.java @@ -0,0 +1,15 @@ +package Bank; + +public class MainTest { + public static void main(String[] args) { + Bank bank = new Bank("a bad bank", 1000); + new ClientThread(bank).start(); + new ClientThread(bank).start(); + new ClientThread(bank).start(); + new ClientThread(bank).start(); + new ClientThread(bank).start(); + new ClientThread(bank).start(); + new ClientThread(bank).start(); + new ClientThread(bank).start(); + } +} \ No newline at end of file diff --git a/Classwork/src/Buffer/BufferCreateIO.java b/Classwork/src/Buffer/BufferCreateIO.java new file mode 100644 index 0000000..d1dc160 --- /dev/null +++ b/Classwork/src/Buffer/BufferCreateIO.java @@ -0,0 +1,45 @@ +package Buffer; + +import java.nio.ByteBuffer; + +import static Buffer.BufferOperation.bufferToString; + +public class BufferCreateIO { + public static void main(String[] args) { + ByteBuffer buffer = ByteBuffer.allocate(10); + System.out.println("初始状态: " + bufferToString(buffer)); + + // 向缓冲区依次写入字节 1, 2, 3, 4, 5 + buffer.put((byte) 1); + buffer.put((byte) 2); + buffer.put((byte) 3); + buffer.put((byte) 4); + buffer.put((byte) 5); + System.out.println("写入5个字节后: " + bufferToString(buffer)); + + // 切换为读模式 + buffer.flip(); + System.out.println("调用flip()后 (读模式): " + bufferToString(buffer)); + + // 读取并打印所有数据 + System.out.print("读取数据: "); + while (buffer.hasRemaining()) { + System.out.print(buffer.get() + " "); + } + System.out.println("\n读取完毕后: " + bufferToString(buffer)); + + // 清空缓冲区 + buffer.clear(); + System.out.println("调用clear()后: " + bufferToString(buffer)); + + // 验证是否可重新写入 + buffer.put((byte) 6); + System.out.println("重新写入一个字节 (6) 后: " + bufferToString(buffer)); + buffer.flip(); + System.out.print("读取新写入的数据: "); + while (buffer.hasRemaining()) { + System.out.print(buffer.get() + " "); + } + System.out.println(); + } +} diff --git a/Classwork/src/Buffer/BufferOperation.java b/Classwork/src/Buffer/BufferOperation.java new file mode 100644 index 0000000..a3657d1 --- /dev/null +++ b/Classwork/src/Buffer/BufferOperation.java @@ -0,0 +1,24 @@ +package Buffer; + +import java.nio.ByteBuffer; +import java.nio.CharBuffer; +import java.nio.IntBuffer; + +public class BufferOperation { + public static String bufferToString(ByteBuffer buffer) { + return "pos=" + buffer.position() + " lim=" + buffer.limit() + " cap=" + buffer.capacity(); + } + public static String charBufferToString(CharBuffer buffer) { + return "pos=" + buffer.position() + " lim=" + buffer.limit() + " cap=" + buffer.capacity(); + } + public static String intBufferToString(IntBuffer buffer) { + return "pos=" + buffer.position() + " lim=" + buffer.limit() + " cap=" + buffer.capacity(); + } + public static String bytesToHex(byte[] bytes, int length) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < length; i++) { + sb.append(String.format("%02X ", bytes[i])); + } + return sb.toString().trim(); + } +} diff --git a/Classwork/src/Data/Data.java b/Classwork/src/Data/Data.java new file mode 100644 index 0000000..51d1471 --- /dev/null +++ b/Classwork/src/Data/Data.java @@ -0,0 +1,56 @@ +package Data; + +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantReadWriteLock; + +public class Data { + private final char[] buffer; + private final ReentrantReadWriteLock rwLock = new ReentrantReadWriteLock(); + private final Lock readLock = rwLock.readLock(); + private final Lock writeLock = rwLock.writeLock(); + + public Data(int size) { + this.buffer = new char[size]; + for (int i = 0; i < buffer.length; i++) { + buffer[i] = '*'; + } + } + + public char[] read() throws InterruptedException { + readLock.lock(); + try { + return doRead(); + } finally { + readLock.unlock(); + } + } + + public void write(char c) throws InterruptedException { + writeLock.lock(); + try { + doWrite(c); + } finally { + writeLock.unlock(); + } + } + + private char[] doRead() throws InterruptedException { + char[] newbuf = new char[buffer.length]; + for (int i = 0; i < buffer.length; i++) { + newbuf[i] = buffer[i]; + } + slowly(); + return newbuf; + } + + private void doWrite(char c) throws InterruptedException { + for (int i = 0; i < buffer.length; i++) { + buffer[i] = c; + slowly(); + } + } + + private void slowly() throws InterruptedException { + Thread.sleep(50); + } +} \ No newline at end of file diff --git a/Classwork/src/Data/Main.java b/Classwork/src/Data/Main.java new file mode 100644 index 0000000..93b840d --- /dev/null +++ b/Classwork/src/Data/Main.java @@ -0,0 +1,40 @@ +package Data; + +public class Main { + public static void main(String[] args) { + Data data = new Data(10); + + ReaderThread reader1 = new ReaderThread("Reader-1", data); + ReaderThread reader2 = new ReaderThread("Reader-2", data); + ReaderThread reader3 = new ReaderThread("Reader-3", data); + ReaderThread reader4 = new ReaderThread("Reader-4", data); + + WriterThread writer1 = new WriterThread("Writer-A", data, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); + WriterThread writer2 = new WriterThread("Writer-B", data, "abcdefghijklmnopqrstuvwxyz"); + + System.out.println("Starting threads..."); + + reader1.start(); + reader2.start(); + writer1.start(); + reader3.start(); + reader4.start(); + writer2.start(); + + try { + Thread.sleep(10000); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + + System.out.println("\nInterrupting threads..."); + reader1.interrupt(); + reader2.interrupt(); + reader3.interrupt(); + reader4.interrupt(); + writer1.interrupt(); + writer2.interrupt(); + + System.out.println("Main thread finished."); + } +} \ No newline at end of file diff --git a/Classwork/src/Data/ReaderThread.java b/Classwork/src/Data/ReaderThread.java new file mode 100644 index 0000000..60d27cd --- /dev/null +++ b/Classwork/src/Data/ReaderThread.java @@ -0,0 +1,24 @@ +package Data; + +public class ReaderThread extends Thread { + private final Data data; + + public ReaderThread(String name, Data data) { + super(name); + this.data = data; + } + + @Override + public void run() { + try { + while (true) { + char[] readBuf = data.read(); + System.out.println(Thread.currentThread().getName() + " reads " + String.valueOf(readBuf)); + Thread.sleep(100); + } + } catch (InterruptedException e) { + System.out.println(Thread.currentThread().getName() + " was interrupted."); + Thread.currentThread().interrupt(); + } + } +} \ No newline at end of file diff --git a/Classwork/src/Data/WriterThread.java b/Classwork/src/Data/WriterThread.java new file mode 100644 index 0000000..91cb436 --- /dev/null +++ b/Classwork/src/Data/WriterThread.java @@ -0,0 +1,37 @@ +package Data; + +public class WriterThread extends Thread { + private final Data data; + private final String filler; + private int index = 0; + + public WriterThread(String name, Data data, String filler) { + super(name); + this.data = data; + this.filler = filler; + } + + @Override + public void run() { + try { + while (true) { + char c = nextChar(); + data.write(c); + System.out.println(Thread.currentThread().getName() + " writes " + c); + Thread.sleep(300); + } + } catch (InterruptedException e) { + System.out.println(Thread.currentThread().getName() + " was interrupted."); + Thread.currentThread().interrupt(); + } + } + + private char nextChar() { + char c = filler.charAt(index); + index++; + if (index >= filler.length()) { + index = 0; + } + return c; + } +} \ No newline at end of file diff --git a/Classwork/src/DataLimited/Data.java b/Classwork/src/DataLimited/Data.java new file mode 100644 index 0000000..70a4874 --- /dev/null +++ b/Classwork/src/DataLimited/Data.java @@ -0,0 +1,63 @@ +package DataLimited; + +import java.util.concurrent.Semaphore; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantReadWriteLock; + +public class Data { + private final char[] buffer; + private final ReentrantReadWriteLock rwLock = new ReentrantReadWriteLock(); + private final Lock readLock = rwLock.readLock(); + private final Lock writeLock = rwLock.writeLock(); + private final Semaphore readSemaphore = new Semaphore(3); + + public Data(int size) { + this.buffer = new char[size]; + for (int i = 0; i < buffer.length; i++) { + buffer[i] = '*'; + } + } + + public char[] read() throws InterruptedException { + readSemaphore.acquire(); + try { + readLock.lock(); + try { + return doRead(); + } finally { + readLock.unlock(); + } + } finally { + readSemaphore.release(); + } + } + + public void write(char c) throws InterruptedException { + writeLock.lock(); + try { + doWrite(c); + } finally { + writeLock.unlock(); + } + } + + private char[] doRead() throws InterruptedException { + char[] newbuf = new char[buffer.length]; + for (int i = 0; i < buffer.length; i++) { + newbuf[i] = buffer[i]; + } + slowly(); + return newbuf; + } + + private void doWrite(char c) throws InterruptedException { + for (int i = 0; i < buffer.length; i++) { + buffer[i] = c; + slowly(); + } + } + + private void slowly() throws InterruptedException { + Thread.sleep(50); + } +} \ No newline at end of file diff --git a/Classwork/src/DataLimited/Main.java b/Classwork/src/DataLimited/Main.java new file mode 100644 index 0000000..be4db07 --- /dev/null +++ b/Classwork/src/DataLimited/Main.java @@ -0,0 +1,40 @@ +package DataLimited; + +public class Main { + public static void main(String[] args) { + Data data = new Data(10); + + ReaderThread reader1 = new ReaderThread("Reader-1", data); + ReaderThread reader2 = new ReaderThread("Reader-2", data); + ReaderThread reader3 = new ReaderThread("Reader-3", data); + ReaderThread reader4 = new ReaderThread("Reader-4", data); + + WriterThread writer1 = new WriterThread("Writer-A", data, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); + WriterThread writer2 = new WriterThread("Writer-B", data, "abcdefghijklmnopqrstuvwxyz"); + + System.out.println("Starting threads..."); + + reader1.start(); + reader2.start(); + writer1.start(); + reader3.start(); + reader4.start(); + writer2.start(); + + try { + Thread.sleep(10000); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + + System.out.println("\nInterrupting threads..."); + reader1.interrupt(); + reader2.interrupt(); + reader3.interrupt(); + reader4.interrupt(); + writer1.interrupt(); + writer2.interrupt(); + + System.out.println("Main thread finished."); + } +} \ No newline at end of file diff --git a/Classwork/src/DataLimited/ReaderThread.java b/Classwork/src/DataLimited/ReaderThread.java new file mode 100644 index 0000000..e409280 --- /dev/null +++ b/Classwork/src/DataLimited/ReaderThread.java @@ -0,0 +1,24 @@ +package DataLimited; + +public class ReaderThread extends Thread { + private final Data data; + + public ReaderThread(String name, Data data) { + super(name); + this.data = data; + } + + @Override + public void run() { + try { + while (true) { + char[] readBuf = data.read(); + System.out.println(Thread.currentThread().getName() + " reads " + String.valueOf(readBuf)); + Thread.sleep(100); + } + } catch (InterruptedException e) { + System.out.println(Thread.currentThread().getName() + " was interrupted."); + Thread.currentThread().interrupt(); + } + } +} \ No newline at end of file diff --git a/Classwork/src/DataLimited/WriterThread.java b/Classwork/src/DataLimited/WriterThread.java new file mode 100644 index 0000000..87bd390 --- /dev/null +++ b/Classwork/src/DataLimited/WriterThread.java @@ -0,0 +1,37 @@ +package DataLimited; + +public class WriterThread extends Thread { + private final Data data; + private final String filler; + private int index = 0; + + public WriterThread(String name, Data data, String filler) { + super(name); + this.data = data; + this.filler = filler; + } + + @Override + public void run() { + try { + while (true) { + char c = nextChar(); + data.write(c); + System.out.println(Thread.currentThread().getName() + " writes " + c); + Thread.sleep(300); + } + } catch (InterruptedException e) { + System.out.println(Thread.currentThread().getName() + " was interrupted."); + Thread.currentThread().interrupt(); + } + } + + private char nextChar() { + char c = filler.charAt(index); + index++; + if (index >= filler.length()) { + index = 0; + } + return c; + } +} \ No newline at end of file diff --git a/Classwork/src/ProducerConsumer/extthread/ThreadC.java b/Classwork/src/ProducerConsumer/extthread/ThreadC.java new file mode 100644 index 0000000..6f641d2 --- /dev/null +++ b/Classwork/src/ProducerConsumer/extthread/ThreadC.java @@ -0,0 +1,19 @@ +package ProducerConsumer.extthread; + +import ProducerConsumer.service.RepastService; + +public class ThreadC extends Thread { + + private RepastService service; + + public ThreadC(RepastService service) { + super(); + this.service = service; + } + + @Override + public void run() { + service.get(); + } + +} diff --git a/Classwork/src/ProducerConsumer/extthread/ThreadP.java b/Classwork/src/ProducerConsumer/extthread/ThreadP.java new file mode 100644 index 0000000..267f9be --- /dev/null +++ b/Classwork/src/ProducerConsumer/extthread/ThreadP.java @@ -0,0 +1,19 @@ +package ProducerConsumer.extthread; + +import ProducerConsumer.service.RepastService; + +public class ThreadP extends Thread { + + private RepastService service; + + public ThreadP(RepastService service) { + super(); + this.service = service; + } + + @Override + public void run() { + service.set(); + } + +} diff --git a/Classwork/src/ProducerConsumer/service/RepastService.java b/Classwork/src/ProducerConsumer/service/RepastService.java new file mode 100644 index 0000000..5939cfa --- /dev/null +++ b/Classwork/src/ProducerConsumer/service/RepastService.java @@ -0,0 +1,94 @@ +package ProducerConsumer.service; + +import java.util.concurrent.Semaphore; +import java.util.concurrent.locks.Condition; +import java.util.concurrent.locks.ReentrantLock; + +public class RepastService { + + volatile private Semaphore setSemaphore = new Semaphore(10);// 厨师 + volatile private Semaphore getSemaphore = new Semaphore(20);// 就餐者 + volatile private ReentrantLock lock = new ReentrantLock(); + volatile private Condition setCondition = lock.newCondition(); + volatile private Condition getCondition = lock.newCondition(); + volatile private Object[] producePosition = new Object[4]; + + private boolean isEmpty() { + boolean isEmpty = true; + for (int i = 0; i < producePosition.length; i++) { + if (producePosition[i] != null) { + isEmpty = false; + break; + } + } + if (isEmpty == true) { + return true; + } else { + return false; + } + } + + private boolean isFull() { + boolean isFull = true; + for (int i = 0; i < producePosition.length; i++) { + if (producePosition[i] == null) { + isFull = false; + break; + } + } + return isFull; + } + + public void set() { + try { + // System.out.println("set"); + setSemaphore.acquire();// 允许同时最多有10个厨师进行生产 + lock.lock(); + while (isFull()) { + System.out.println("生产者在等待"); + setCondition.await(); + } + for (int i = 0; i < producePosition.length; i++) { + if (producePosition[i] == null) { + producePosition[i] = "数据"; + System.out.println(Thread.currentThread().getName() + + " 生产了 " + producePosition[i]); + break; + } + } + getCondition.signalAll(); + lock.unlock(); + } catch (InterruptedException e) { + e.printStackTrace(); + } finally { + setSemaphore.release(); + } + } + + public void get() { + try { + // System.out.println("get"); + getSemaphore.acquire();// 允许同时最多有16个就餐者 + lock.lock(); + while (isEmpty()) { + System.out.println("消费者在等待"); + getCondition.await(); + } + for (int i = 0; i < producePosition.length; i++) { + if (producePosition[i] != null) { + System.out.println(Thread.currentThread().getName() + + " 消费了 " + producePosition[i]); + producePosition[i] = null; + break; + } + } + setCondition.signalAll(); + lock.unlock(); + } catch (InterruptedException e) { + e.printStackTrace(); + } finally { + getSemaphore.release(); + } + } + +} diff --git a/Classwork/src/ProducerConsumer/test/run/Run.java b/Classwork/src/ProducerConsumer/test/run/Run.java new file mode 100644 index 0000000..362b771 --- /dev/null +++ b/Classwork/src/ProducerConsumer/test/run/Run.java @@ -0,0 +1,24 @@ +package ProducerConsumer.test.run; + +import ProducerConsumer.service.RepastService; +import ProducerConsumer.extthread.ThreadC; +import ProducerConsumer.extthread.ThreadP; + +public class Run { + + public static void main(String[] args) throws InterruptedException { + RepastService service = new RepastService(); + ThreadP[] arrayP = new ThreadP[60]; + ThreadC[] arrayC = new ThreadC[60]; + for (int i = 0; i < 60; i++) { + arrayP[i] = new ThreadP(service); + arrayC[i] = new ThreadC(service); + } + Thread.sleep(2000); + for (int i = 0; i < 60; i++) { + arrayP[i].start(); + arrayC[i].start(); + } + } + +} diff --git a/Classwork/src/Race/TortoiseHareRace.java b/Classwork/src/Race/TortoiseHareRace.java new file mode 100644 index 0000000..21ebab1 --- /dev/null +++ b/Classwork/src/Race/TortoiseHareRace.java @@ -0,0 +1,88 @@ +package Race; + +import java.util.Random; +import java.util.concurrent.TimeUnit; + +public class TortoiseHareRace { + private static final int RACE_LENGTH = 100; // 赛道长度(米) + private static int tortoisePosition = 0; // 乌龟位置 + private static int harePosition = 0; // 兔子位置 + private static boolean raceFinished = false; // 比赛是否结束 + private static final Object lock = new Object(); // 同步锁 + + public static void main(String[] args) { + Random random = new Random(); + + // 乌龟线程:速度慢但稳定 + Thread tortoise = new Thread(() -> { + while (!raceFinished) { + synchronized (lock) { + // 乌龟每次移动1-2米 + int step = random.nextInt(2) + 1; + tortoisePosition += step; + System.out.println("乌龟前进了" + step + "米,当前位置:" + tortoisePosition + "米"); + + if (tortoisePosition >= RACE_LENGTH) { + raceFinished = true; + System.out.println("乌龟赢得了比赛!"); + } + } + + try { + TimeUnit.MILLISECONDS.sleep(200); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + }, "乌龟"); + + // 兔子线程:速度快但会休息 + Thread hare = new Thread(() -> { + while (!raceFinished) { + synchronized (lock) { + // 兔子移动速度更快,每次移动5-10米 + int step = random.nextInt(6) + 5; + harePosition += step; + System.out.println("兔子前进了" + step + "米,当前位置:" + harePosition + "米"); + + if (harePosition >= RACE_LENGTH) { + raceFinished = true; + System.out.println("兔子赢得了比赛!"); + } + } + + // 兔子有30%的概率会休息 + if (random.nextInt(10) < 3) { + int restTime = random.nextInt(600) + 200; + System.out.println("兔子太自信了,休息" + restTime + "毫秒"); + try { + TimeUnit.MILLISECONDS.sleep(restTime); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } else { + try { + TimeUnit.MILLISECONDS.sleep(100); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + }, "兔子"); + + System.out.println("比赛开始!"); + tortoise.start(); + hare.start(); + + try { + tortoise.join(); + hare.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + System.out.println("比赛结束!"); + System.out.println("最终结果 - 乌龟:" + Math.min(tortoisePosition, RACE_LENGTH) + + "米,兔子:" + Math.min(harePosition, RACE_LENGTH) + "米"); + } +} \ No newline at end of file diff --git a/Classwork/src/RedPacket/AICRedPacketGrabber.java b/Classwork/src/RedPacket/AICRedPacketGrabber.java new file mode 100644 index 0000000..b1549e2 --- /dev/null +++ b/Classwork/src/RedPacket/AICRedPacketGrabber.java @@ -0,0 +1,78 @@ +package RedPacket; + +import java.util.Random; + +public class AICRedPacketGrabber { + private static int totalMoney = 100; + private static int thread1Money = 0; + private static int thread2Money = 0; + private static final Object lock = new Object(); + + public static void main(String[] args) { + Thread thread1 = new Thread(new Runnable() { + @Override + public void run() { + grabMoney(true); + } + }, "线程1"); + + Thread thread2 = new Thread(new Runnable() { + @Override + public void run() { + grabMoney(false); + } + }, "线程2"); + + thread1.start(); + thread2.start(); + + try { + thread1.join(); + thread2.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + System.out.println("线程1抢到的总金额: " + thread1Money + "元"); + System.out.println("线程2抢到的总金额: " + thread2Money + "元"); + System.out.println("剩余金额: " + totalMoney + "元"); + } + + private static void grabMoney(boolean isThread1) { + Random random = new Random(); + + while (true) { + synchronized (lock) { + if (totalMoney < 1) { + break; + } + + int grabMoney = random.nextInt(3) + 1; + + if (grabMoney > totalMoney) { + grabMoney = totalMoney; + } + + totalMoney -= grabMoney; + + if (isThread1) { + thread1Money += grabMoney; + System.out.println("线程1抢到了" + grabMoney + "元,剩余" + totalMoney + "元"); + } else { + thread2Money += grabMoney; + System.out.println("线程2抢到了" + grabMoney + "元,剩余" + totalMoney + "元"); + } + + if (totalMoney == 0) { + break; + } + } + + try { + Thread.sleep(10); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } +} diff --git a/Classwork/src/RedPacket/CFRedPacketGrabber.java b/Classwork/src/RedPacket/CFRedPacketGrabber.java new file mode 100644 index 0000000..2db58e8 --- /dev/null +++ b/Classwork/src/RedPacket/CFRedPacketGrabber.java @@ -0,0 +1,91 @@ +package RedPacket; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import java.util.Scanner; +import java.util.concurrent.*; + +public class CFRedPacketGrabber { + private static int totalMoney = 100; + private static final Object lock = new Object(); + + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + System.out.print("请输入参与抢红包的线程数: "); + int threadCount = scanner.nextInt(); + scanner.close(); + + ExecutorService executor = Executors.newFixedThreadPool(threadCount); + List> futures = new ArrayList<>(); + + for (int i = 0; i < threadCount; i++) { + final int threadId = i + 1; + Future future = executor.submit(new RedPacketGrabber(threadId)); + futures.add(future); + } + + int[] threadMoney = new int[threadCount]; + try { + for (int i = 0; i < threadCount; i++) { + threadMoney[i] = futures.get(i).get(); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + + executor.shutdown(); + + for (int i = 0; i < threadCount; i++) { + System.out.println("线程" + (i + 1) + "抢到的总金额: " + threadMoney[i] + "元"); + } + System.out.println("剩余金额: " + totalMoney + "元"); + } + + static class RedPacketGrabber implements Callable { + private final int threadId; + private int moneyGrabbed = 0; + + public RedPacketGrabber(int threadId) { + this.threadId = threadId; + } + + @Override + public Integer call() { + Random random = new Random(); + String threadName = "线程" + threadId; + + while (true) { + synchronized (lock) { + if (totalMoney < 1) { + break; + } + + int grabMoney = random.nextInt(3) + 1; + + if (grabMoney > totalMoney) { + grabMoney = totalMoney; + } + + totalMoney -= grabMoney; + moneyGrabbed += grabMoney; + + System.out.println(threadName + "抢到了" + grabMoney + "元,剩余" + totalMoney + "元"); + + if (totalMoney == 0) { + break; + } + } + + try { + Thread.sleep(10); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + break; + } + } + + return moneyGrabbed; + } + } +} diff --git a/Classwork/src/RedPacket/LambdaRedPacketGrabber.java b/Classwork/src/RedPacket/LambdaRedPacketGrabber.java new file mode 100644 index 0000000..53a0b20 --- /dev/null +++ b/Classwork/src/RedPacket/LambdaRedPacketGrabber.java @@ -0,0 +1,82 @@ +package RedPacket; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import java.util.Scanner; +import java.util.concurrent.*; + +public class LambdaRedPacketGrabber { + private static int totalMoney = 100; + private static final Object lock = new Object(); + + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + System.out.print("请输入参与抢红包的线程数: "); + int threadCount = scanner.nextInt(); + scanner.close(); + + ExecutorService executor = Executors.newFixedThreadPool(threadCount); + List> futures = new ArrayList<>(); + + for (int i = 0; i < threadCount; i++) { + final int threadId = i + 1; + + Future future = executor.submit(() -> { + Random random = new Random(); + String threadName = "线程" + threadId; + int moneyGrabbed = 0; + + while (true) { + synchronized (lock) { + if (totalMoney < 1) { + break; + } + + int grabMoney = random.nextInt(3) + 1; + + if (grabMoney > totalMoney) { + grabMoney = totalMoney; + } + + totalMoney -= grabMoney; + moneyGrabbed += grabMoney; + + System.out.println(threadName + "抢到了" + grabMoney + "元,剩余" + totalMoney + "元"); + + if (totalMoney == 0) { + break; + } + } + + try { + Thread.sleep(10); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + break; + } + } + + return moneyGrabbed; + }); + + futures.add(future); + } + + int[] threadMoney = new int[threadCount]; + try { + for (int i = 0; i < threadCount; i++) { + threadMoney[i] = futures.get(i).get(); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + + executor.shutdown(); + + for (int i = 0; i < threadCount; i++) { + System.out.println("线程" + (i + 1) + "抢到的总金额: " + threadMoney[i] + "元"); + } + System.out.println("剩余金额: " + totalMoney + "元"); + } +} diff --git a/Classwork/src/RedPacket/OrderedRedPacketGrabber.java b/Classwork/src/RedPacket/OrderedRedPacketGrabber.java new file mode 100644 index 0000000..430c7ea --- /dev/null +++ b/Classwork/src/RedPacket/OrderedRedPacketGrabber.java @@ -0,0 +1,76 @@ +package RedPacket; + +import java.util.Random; + +public class OrderedRedPacketGrabber { + private static int totalMoney = 100; + private static int thread1Money = 0; + private static int thread2Money = 0; + private static boolean isThread1Turn = true; + private static final Object lock = new Object(); + + public static void main(String[] args) { + Thread thread1 = new Thread(() -> grabMoney(true), "线程1"); + Thread thread2 = new Thread(() -> grabMoney(false), "线程2"); + + thread1.start(); + thread2.start(); + + try { + thread1.join(); + thread2.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + System.out.println("线程1抢到的总金额: " + thread1Money + "元"); + System.out.println("线程2抢到的总金额: " + thread2Money + "元"); + System.out.println("剩余金额: " + totalMoney + "元"); + } + + private static void grabMoney(boolean isThread1) { + Random random = new Random(); + + while (true) { + synchronized (lock) { + while (isThread1Turn != isThread1 && totalMoney >= 1) { + try { + lock.wait(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + if (totalMoney < 1) { + lock.notifyAll(); + break; + } + + int grabMoney = random.nextInt(3) + 1; + + if (grabMoney > totalMoney) { + grabMoney = totalMoney; + } + + totalMoney -= grabMoney; + + if (isThread1) { + thread1Money += grabMoney; + System.out.println("线程1抢到了" + grabMoney + "元,剩余" + totalMoney + "元"); + } else { + thread2Money += grabMoney; + System.out.println("线程2抢到了" + grabMoney + "元,剩余" + totalMoney + "元"); + } + + isThread1Turn = !isThread1Turn; + + lock.notify(); + + if (totalMoney == 0) { + lock.notifyAll(); + break; + } + } + } + } +} \ No newline at end of file diff --git a/Classwork/src/RedPacket/RandomRedPacketGrabber.java b/Classwork/src/RedPacket/RandomRedPacketGrabber.java new file mode 100644 index 0000000..0c752a4 --- /dev/null +++ b/Classwork/src/RedPacket/RandomRedPacketGrabber.java @@ -0,0 +1,67 @@ +package RedPacket; + +import java.util.Random; + +public class RandomRedPacketGrabber { + private static int totalMoney = 100; + private static int thread1Money = 0; + private static int thread2Money = 0; + private static final Object lock = new Object(); + + public static void main(String[] args) { + Thread thread1 = new Thread(() -> grabMoney(true), "线程1"); + Thread thread2 = new Thread(() -> grabMoney(false), "线程2"); + + thread1.start(); + thread2.start(); + + try { + thread1.join(); + thread2.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + System.out.println("线程1抢到的总金额: " + thread1Money + "元"); + System.out.println("线程2抢到的总金额: " + thread2Money + "元"); + System.out.println("剩余金额: " + totalMoney + "元"); + } + + private static void grabMoney(boolean isThread1) { + Random random = new Random(); + + while (true) { + synchronized (lock) { + if (totalMoney < 1) { + break; + } + + int grabMoney = random.nextInt(3) + 1; + + if (grabMoney > totalMoney) { + grabMoney = totalMoney; + } + + totalMoney -= grabMoney; + + if (isThread1) { + thread1Money += grabMoney; + System.out.println("线程1抢到了" + grabMoney + "元,剩余" + totalMoney + "元"); + } else { + thread2Money += grabMoney; + System.out.println("线程2抢到了" + grabMoney + "元,剩余" + totalMoney + "元"); + } + + if (totalMoney == 0) { + break; + } + } + + try { + Thread.sleep(10); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/Classwork/src/RedPacket/ThreadPoolRedPacketGrabber.java b/Classwork/src/RedPacket/ThreadPoolRedPacketGrabber.java new file mode 100644 index 0000000..019ff62 --- /dev/null +++ b/Classwork/src/RedPacket/ThreadPoolRedPacketGrabber.java @@ -0,0 +1,88 @@ +package RedPacket; + +import java.util.Random; +import java.util.concurrent.*; + +public class ThreadPoolRedPacketGrabber { + private static int totalMoney = 100; + private static final int THREAD_COUNT = 2; + private static final Object lock = new Object(); + + public static void main(String[] args) { + ExecutorService executor = Executors.newFixedThreadPool(THREAD_COUNT); + + CountDownLatch latch = new CountDownLatch(THREAD_COUNT); + + int[] threadMoney = new int[THREAD_COUNT]; + + for (int i = 0; i < THREAD_COUNT; i++) { + final int threadId = i; + executor.submit(new RedPacketGrabber(threadId, threadMoney, latch)); + } + + try { + latch.await(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + executor.shutdown(); + + for (int i = 0; i < THREAD_COUNT; i++) { + System.out.println("线程" + (i + 1) + "抢到的总金额: " + threadMoney[i] + "元"); + } + System.out.println("剩余金额: " + totalMoney + "元"); + } + + static class RedPacketGrabber implements Runnable { + private final int threadId; + private final int[] threadMoney; + private final CountDownLatch latch; + + public RedPacketGrabber(int threadId, int[] threadMoney, CountDownLatch latch) { + this.threadId = threadId; + this.threadMoney = threadMoney; + this.latch = latch; + } + + @Override + public void run() { + try { + Random random = new Random(); + String threadName = "线程" + (threadId + 1); + + while (true) { + synchronized (lock) { + if (totalMoney < 1) { + break; + } + + int grabMoney = random.nextInt(3) + 1; + + if (grabMoney > totalMoney) { + grabMoney = totalMoney; + } + + totalMoney -= grabMoney; + threadMoney[threadId] += grabMoney; + + System.out.println(threadName + "抢到了" + grabMoney + "元,剩余" + totalMoney + "元"); + + if (totalMoney == 0) { + break; + } + } + + try { + Thread.sleep(10); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + break; + } + } + } finally { + latch.countDown(); + } + } + } +} \ No newline at end of file diff --git a/Final/.gitignore b/Final/.gitignore new file mode 100644 index 0000000..f68d109 --- /dev/null +++ b/Final/.gitignore @@ -0,0 +1,29 @@ +### IntelliJ IDEA ### +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/Final/.idea/.gitignore b/Final/.idea/.gitignore new file mode 100644 index 0000000..7d05e99 --- /dev/null +++ b/Final/.idea/.gitignore @@ -0,0 +1,10 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# 依赖于环境的 Maven 主目录路径 +/mavenHomeManager.xml +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/Final/.idea/misc.xml b/Final/.idea/misc.xml new file mode 100644 index 0000000..6f29fee --- /dev/null +++ b/Final/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Final/.idea/modules.xml b/Final/.idea/modules.xml new file mode 100644 index 0000000..cb7a089 --- /dev/null +++ b/Final/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/Final/.idea/uiDesigner.xml b/Final/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/Final/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Final/.idea/vcs.xml b/Final/.idea/vcs.xml new file mode 100644 index 0000000..d843f34 --- /dev/null +++ b/Final/.idea/vcs.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Final/Final.iml b/Final/Final.iml new file mode 100644 index 0000000..c90834f --- /dev/null +++ b/Final/Final.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Final/src/aio/AIOChatClient.java b/Final/src/aio/AIOChatClient.java new file mode 100644 index 0000000..37dc0c6 --- /dev/null +++ b/Final/src/aio/AIOChatClient.java @@ -0,0 +1,108 @@ +package aio; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.InetSocketAddress; +import java.nio.ByteBuffer; +import java.nio.channels.AsynchronousSocketChannel; +import java.nio.channels.CompletionHandler; +import java.nio.charset.StandardCharsets; +import java.util.concurrent.CountDownLatch; + +public class AIOChatClient { + private static final String HOST = "127.0.0.1"; + private static final int PORT = 8888; + private AsynchronousSocketChannel clientChannel; + private CountDownLatch latch; + public void start() throws Exception { + clientChannel = AsynchronousSocketChannel.open(); + latch = new CountDownLatch(1); + clientChannel.connect(new InetSocketAddress(HOST, PORT), null, new CompletionHandler() { + @Override + public void completed(Void result, Object attachment) { + System.out.println("成功连接到服务器。现在可以开始聊天了(输入 'exit' 退出)。"); + startRead(); + startWrite(); + } + @Override + public void failed(Throwable exc, Object attachment) { + System.err.println("连接服务器失败: " + exc.getMessage()); + latch.countDown(); + } + }); + latch.await(); + } + private void startRead() { + ByteBuffer buffer = ByteBuffer.allocate(1024); + clientChannel.read(buffer, buffer, new CompletionHandler() { + @Override + public void completed(Integer result, ByteBuffer attachment) { + if (result > 0) { + attachment.flip(); + String message = StandardCharsets.UTF_8.decode(attachment).toString(); + System.out.println(message); + attachment.clear(); + } else if (result == -1) { + handleDisconnect(); + return; + } + if (clientChannel.isOpen()) { + clientChannel.read(attachment, attachment, this); + } + } + @Override + public void failed(Throwable exc, ByteBuffer attachment) { + System.err.println("读取数据失败: " + exc.getMessage()); + handleDisconnect(); + } + }); + } + private void startWrite() { + new Thread(() -> { + BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in)); + try { + String message; + while ((message = consoleReader.readLine()) != null) { + if ("exit".equalsIgnoreCase(message.trim())) { + break; + } + ByteBuffer buffer = StandardCharsets.UTF_8.encode(message); + clientChannel.write(buffer, null, new CompletionHandler() { + @Override + public void completed(Integer result, Object attachment) {} + @Override + public void failed(Throwable exc, Object attachment) { + System.err.println("发送消息失败: " + exc.getMessage()); + handleDisconnect(); + } + }); + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + handleDisconnect(); + } + }).start(); + } + private void handleDisconnect() { + try { + if (clientChannel.isOpen()) { + clientChannel.close(); + System.out.println("与服务器的连接已断开。"); + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + latch.countDown(); + } + } + public static void main(String[] args) { + try { + new AIOChatClient().start(); + } catch (Exception e) { + System.err.println("客户端启动时发生错误。"); + e.printStackTrace(); + } + } +} diff --git a/Final/src/aio/AIOChatServer.java b/Final/src/aio/AIOChatServer.java new file mode 100644 index 0000000..f9572b7 --- /dev/null +++ b/Final/src/aio/AIOChatServer.java @@ -0,0 +1,127 @@ +package aio; + +import java.io.IOException; +import java.net.InetSocketAddress; +import java.nio.ByteBuffer; +import java.nio.channels.AsynchronousChannelGroup; +import java.nio.channels.AsynchronousServerSocketChannel; +import java.nio.channels.AsynchronousSocketChannel; +import java.nio.channels.CompletionHandler; +import java.nio.charset.StandardCharsets; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.Executors; + +public class AIOChatServer { + private static final int PORT = 8888; + private AsynchronousServerSocketChannel serverSocketChannel; + private final CopyOnWriteArrayList clients = new CopyOnWriteArrayList<>(); + public void start() { + try { + AsynchronousChannelGroup group = AsynchronousChannelGroup.withThreadPool(Executors.newFixedThreadPool(10)); + serverSocketChannel = AsynchronousServerSocketChannel.open(group); + serverSocketChannel.bind(new InetSocketAddress(PORT)); + System.out.println("服务器已启动,监听端口:" + PORT); + serverSocketChannel.accept(null, new AcceptHandler()); + System.in.read(); + } catch (IOException e) { + e.printStackTrace(); + } + } + private class AcceptHandler implements CompletionHandler { + @Override + public void completed(AsynchronousSocketChannel clientChannel, Object attachment) { + serverSocketChannel.accept(null, this); + clients.add(clientChannel); + try { + System.out.println("客户端 [" + clientChannel.getRemoteAddress() + "] 已连接。当前在线人数:" + clients.size()); + } catch (IOException e) { + e.printStackTrace(); + } + ByteBuffer buffer = ByteBuffer.allocate(1024); + clientChannel.read(buffer, new ClientSession(clientChannel, buffer), new ReadWriteHandler()); + } + @Override + public void failed(Throwable exc, Object attachment) { + System.out.println("接受连接失败:" + exc); + } + } + private class ReadWriteHandler implements CompletionHandler { + @Override + public void completed(Integer result, ClientSession session) { + if (result > 0) { + session.buffer.flip(); + String receivedMessage = StandardCharsets.UTF_8.decode(session.buffer).toString().trim(); + if (!receivedMessage.isEmpty()) { + String messageToSend; + try { + messageToSend = "客户端 [" + session.clientChannel.getRemoteAddress() + "] 说: " + receivedMessage; + System.out.println("正在广播: " + messageToSend); + broadcast(messageToSend, session.clientChannel); + } catch (IOException e) { + e.printStackTrace(); + } + } + session.buffer.clear(); + session.clientChannel.read(session.buffer, session, this); + } else if (result == -1) { + handleDisconnect(session.clientChannel); + } + } + @Override + public void failed(Throwable exc, ClientSession session) { + System.out.println("读写数据时发生错误:" + exc.getMessage()); + handleDisconnect(session.clientChannel); + } + } + private void broadcast(String message, AsynchronousSocketChannel sender) { + ByteBuffer initialBuffer = StandardCharsets.UTF_8.encode(message); + for (AsynchronousSocketChannel client : clients) { + if (client.isOpen() && !client.equals(sender)) { + ByteBuffer bufferForWriting = initialBuffer.duplicate(); + class WriteContext { + final AsynchronousSocketChannel clientChannel; + final ByteBuffer buffer; + WriteContext(AsynchronousSocketChannel client, ByteBuffer buf) { + this.clientChannel = client; + this.buffer = buf; + } + } + WriteContext context = new WriteContext(client, bufferForWriting); + client.write(bufferForWriting, context, new CompletionHandler() { + @Override + public void completed(Integer result, WriteContext attachment) { + // 如果缓冲区中还有剩余数据,说明是一次“部分写”,需要继续发送 + if (attachment.buffer.hasRemaining()) { + attachment.clientChannel.write(attachment.buffer, attachment, this); + } + } + @Override + public void failed(Throwable exc, WriteContext attachment) { + System.err.println("向客户端 " + attachment.clientChannel + " 广播消息失败: " + exc); + handleDisconnect(attachment.clientChannel); + } + }); + } + } + } + private void handleDisconnect(AsynchronousSocketChannel clientChannel) { + clients.remove(clientChannel); + try { + System.out.println("客户端 [" + clientChannel.getRemoteAddress() + "] 已断开连接。当前在线人数:" + clients.size()); + clientChannel.close(); + } catch (IOException e) { + } + } + + private static class ClientSession { + AsynchronousSocketChannel clientChannel; + ByteBuffer buffer; + public ClientSession(AsynchronousSocketChannel clientChannel, ByteBuffer buffer) { + this.clientChannel = clientChannel; + this.buffer = buffer; + } + } + public static void main(String[] args) { + new AIOChatServer().start(); + } +} \ No newline at end of file diff --git a/Final/src/aio/AsyncQueueDemo.java b/Final/src/aio/AsyncQueueDemo.java new file mode 100644 index 0000000..b142631 --- /dev/null +++ b/Final/src/aio/AsyncQueueDemo.java @@ -0,0 +1,96 @@ +package aio; + +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; + +public class AsyncQueueDemo { + public static void main(String[] args) throws InterruptedException { + final int QUEUE_CAPACITY = 10; + final int PRODUCER_COUNT = 3; + final int CONSUMER_COUNT = 5; + final int ITEMS_PER_PRODUCER = 20; + AsyncQueue queue = new AsyncQueue<>(QUEUE_CAPACITY); + ExecutorService producerExecutor = Executors.newFixedThreadPool(PRODUCER_COUNT); + ExecutorService consumerExecutor = Executors.newFixedThreadPool(CONSUMER_COUNT); + AtomicInteger producedCount = new AtomicInteger(0); + AtomicInteger consumedCount = new AtomicInteger(0); + System.out.println("启动 " + PRODUCER_COUNT + " 个生产者和 " + CONSUMER_COUNT + " 个消费者..."); + for (int i = 0; i < PRODUCER_COUNT; i++) { + final int producerId = i + 1; + producerExecutor.submit(() -> { + for (int j = 0; j < ITEMS_PER_PRODUCER; j++) { + String item = "产品-" + producerId + "-" + (j + 1); + queue.putAsync(item).thenRun(() -> { + System.out.println("生产者 " + producerId + " 成功放入: " + item); + producedCount.incrementAndGet(); + }); + try { + Thread.sleep((long)(Math.random() * 100)); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + } + }); + } + for (int i = 0; i < CONSUMER_COUNT; i++) { + final int consumerId = i + 1; + consumerExecutor.submit(() -> { + while (consumedCount.get() < PRODUCER_COUNT * ITEMS_PER_PRODUCER) { + queue.takeAsync().thenAccept(item -> { + System.out.println("消费者 " + consumerId + " 成功取出: " + item); + consumedCount.incrementAndGet(); + }); + try { + Thread.sleep((long)(Math.random() * 200)); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + } + }); + } + producerExecutor.shutdown(); + producerExecutor.awaitTermination(1, TimeUnit.MINUTES); + while (consumedCount.get() < PRODUCER_COUNT * ITEMS_PER_PRODUCER) { + Thread.sleep(100); + } + System.out.println("\n所有任务完成。"); + System.out.println("总共生产: " + producedCount.get()); + System.out.println("总共消费: " + consumedCount.get()); + consumerExecutor.shutdownNow(); + } +} +class AsyncQueue { + private final BlockingQueue queue; + private final ExecutorService executor = Executors.newCachedThreadPool(); + public AsyncQueue(int capacity) { + this.queue = new ArrayBlockingQueue<>(capacity); + } + public CompletableFuture putAsync(T item) { + return CompletableFuture.runAsync(() -> { + try { + queue.put(item); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new RuntimeException("放入队列时被中断", e); + } + }, executor); + } + public CompletableFuture takeAsync() { + return CompletableFuture.supplyAsync(() -> { + try { + return queue.take(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new RuntimeException("从队列取出时被中断", e); + } + }, executor); + } + public void shutdown() { + executor.shutdown(); + } +} diff --git a/Final/src/multi_thread/AlternatingPrint.java b/Final/src/multi_thread/AlternatingPrint.java new file mode 100644 index 0000000..a077647 --- /dev/null +++ b/Final/src/multi_thread/AlternatingPrint.java @@ -0,0 +1,47 @@ +package multi_thread; + +public class AlternatingPrint { + private final Object lock = new Object(); + private int number = 1; + public static void main(String[] args) { + AlternatingPrint printer = new AlternatingPrint(); + Thread oddThread = new Thread(printer::printOddNumbers, "奇数计数线程"); + Thread evenThread = new Thread(printer::printEvenNumbers, "偶数计数线程"); + oddThread.start(); + evenThread.start(); + } + public void printOddNumbers() { + synchronized (lock) { + while (number < 100) { + while (number % 2 == 0) { + try { + lock.wait(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + System.err.println("奇数计数线程中断."); + } + } + System.out.println(Thread.currentThread().getName() + ": " + number); + number++; + lock.notifyAll(); + } + } + } + public void printEvenNumbers() { + synchronized (lock) { + while (number <= 100) { + while (number % 2 != 0) { + try { + lock.wait(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + System.err.println("偶数计数线程中断."); + } + } + System.out.println(Thread.currentThread().getName() + ": " + number); + number++; + lock.notifyAll(); + } + } + } +} \ No newline at end of file diff --git a/Final/src/multi_thread/CountDownLatchDemo.java b/Final/src/multi_thread/CountDownLatchDemo.java new file mode 100644 index 0000000..6cab73f --- /dev/null +++ b/Final/src/multi_thread/CountDownLatchDemo.java @@ -0,0 +1,43 @@ +package multi_thread; + +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + +public class CountDownLatchDemo { + public static void main(String[] args) throws InterruptedException { + int numberOfWorkers = 3; + CountDownLatch latch = new CountDownLatch(numberOfWorkers); + System.out.println("主线程启动工作线程..."); + for (int i = 1; i <= numberOfWorkers; i++) { + Thread worker = new Thread(new Worker(i, latch)); + worker.start(); + } + System.out.println("主线程正在等待工作线程结束..."); + latch.await(); + System.out.println("所有工作线程结束,主线程继续运行。"); + } +} + +class Worker implements Runnable { + private final int id; + private final CountDownLatch latch; + public Worker(int id, CountDownLatch latch) { + this.id = id; + this.latch = latch; + } + @Override + public void run() { + try { + System.out.println("multi_thread.Worker " + id + " 开始工作。"); + int workTime = (int) (Math.random() * 3000) + 1000; + TimeUnit.MILLISECONDS.sleep(workTime); + System.out.println("multi_thread.Worker " + id + " 完成工作。"); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + System.err.println("multi_thread.Worker " + id + " 被中断。"); + } finally { + latch.countDown(); + System.out.println("multi_thread.Worker " + id + " 执行计数器减一. 剩余: " + latch.getCount()); + } + } +} diff --git a/Final/src/multi_thread/ExecutorServiceDemo.java b/Final/src/multi_thread/ExecutorServiceDemo.java new file mode 100644 index 0000000..441a8b1 --- /dev/null +++ b/Final/src/multi_thread/ExecutorServiceDemo.java @@ -0,0 +1,55 @@ +package multi_thread; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; + +public class ExecutorServiceDemo { + public static void main(String[] args) { + ExecutorService executor = Executors.newFixedThreadPool(3); + List> futureList = new ArrayList<>(); + int numberOfTasks = 5; + System.out.println("提交 " + numberOfTasks + " 个任务到线程池..."); + for (int i = 1; i <= numberOfTasks; i++) { + Callable task = new Task(i); + Future future = executor.submit(task); + futureList.add(future); + } + System.out.println("所有任务已提交,获取结果..."); + for (Future future : futureList) { + try { + String result = future.get(); + System.out.println(result); + } catch (InterruptedException | ExecutionException e) { + System.err.println("获取结果时出错 " + e.getMessage()); + } + } + System.out.println("终止 executor service。"); + executor.shutdown(); + try { + if (!executor.awaitTermination(60, TimeUnit.SECONDS)) { + executor.shutdownNow(); + } + } catch (InterruptedException e) { + executor.shutdownNow(); + } + } +} + +class Task implements Callable { + private final int taskId; + public Task(int taskId) { + this.taskId = taskId; + } + @Override + public String call() throws Exception { + System.out.println("-> 任务 " + taskId + " 运行于线程: " + Thread.currentThread().getName()); + TimeUnit.MILLISECONDS.sleep((long) (Math.random() * 2000) + 500); + return "任务结果: " + taskId; + } +} diff --git a/Final/src/multi_thread/ProducerConsumer.java b/Final/src/multi_thread/ProducerConsumer.java new file mode 100644 index 0000000..b51fc35 --- /dev/null +++ b/Final/src/multi_thread/ProducerConsumer.java @@ -0,0 +1,74 @@ +package multi_thread; + +import java.util.LinkedList; +import java.util.Queue; +import java.util.Random; + +public class ProducerConsumer { + public static void main(String[] args) { + Buffer buffer = new Buffer(5); + Thread producerThread = new Thread(() -> { + try { + for (int i = 0; i < 20; i++) { + buffer.produce(i); + Thread.sleep(new Random().nextInt(100)); + } + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + System.err.println("生产者被中断。"); + } + }, "生产者"); + Thread consumerThread = new Thread(() -> { + try { + for (int i = 0; i < 20; i++) { + buffer.consume(); + // 模拟消费耗时 + Thread.sleep(new Random().nextInt(250)); + } + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + System.err.println("消费者被中断。"); + } + }, "消费者"); + producerThread.start(); + consumerThread.start(); + try { + producerThread.join(); + consumerThread.join(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + System.err.println("主线程在等待时被中断。"); + } + System.out.println("所有生产和消费任务完成。程序结束。"); + } +} + +class Buffer { + private final Queue queue; + private final int capacity; + public Buffer(int capacity) { + this.queue = new LinkedList<>(); + this.capacity = capacity; + } + public synchronized void produce(int item) throws InterruptedException { + while (queue.size() == capacity) { + System.out.println("缓冲区已满。" + Thread.currentThread().getName() + " 进入等待状态 (释放锁)..."); + wait(); + System.out.println(Thread.currentThread().getName() + " 已被唤醒!"); + } + queue.add(item); + System.out.println(Thread.currentThread().getName() + " 生产了: " + item + " (当前容量: " + queue.size() + ")"); + notifyAll(); + } + public synchronized int consume() throws InterruptedException { + while (queue.isEmpty()) { + System.out.println("缓冲区为空。" + Thread.currentThread().getName() + " 进入等待状态 (释放锁)..."); + wait(); + System.out.println(Thread.currentThread().getName() + " 已被唤醒!"); + } + int item = queue.poll(); + System.out.println(Thread.currentThread().getName() + " 消费了: " + item + " (当前容量: " + queue.size() + ")"); + notifyAll(); + return item; + } +} diff --git a/Final/src/multi_thread/StaticSyncCounter.java b/Final/src/multi_thread/StaticSyncCounter.java new file mode 100644 index 0000000..fa9ccfb --- /dev/null +++ b/Final/src/multi_thread/StaticSyncCounter.java @@ -0,0 +1,26 @@ +package multi_thread; + +public class StaticSyncCounter { + private static int count = 0; + public static synchronized void increment() { + count++; + } + public static void main(String[] args) throws InterruptedException { + int numThreads = 10; + int incrementsPerThread = 1000; + Thread[] threads = new Thread[numThreads]; + for (int i = 0; i < numThreads; i++) { + threads[i] = new Thread(() -> { + for (int j = 0; j < incrementsPerThread; j++) { + increment(); + } + }); + threads[i].start(); + } + for (Thread thread : threads) { + thread.join(); + } + System.out.println("期望计数: " + (numThreads * incrementsPerThread)); + System.out.println("实际计数: " + count); + } +} \ No newline at end of file diff --git a/Final/src/nio/NioChatClient.java b/Final/src/nio/NioChatClient.java new file mode 100644 index 0000000..f5c87fd --- /dev/null +++ b/Final/src/nio/NioChatClient.java @@ -0,0 +1,87 @@ +package nio; + +import java.io.IOException; +import java.net.InetSocketAddress; +import java.nio.ByteBuffer; +import java.nio.channels.SelectionKey; +import java.nio.channels.Selector; +import java.nio.channels.SocketChannel; +import java.nio.charset.Charset; +import java.util.Iterator; +import java.util.Scanner; + +public class NioChatClient { + private static final int PORT = 8080; + private static final String HOST = "127.0.0.1"; + private static final Charset CHARSET = Charset.forName("UTF-8"); + public static void main(String[] args) { + try { + Selector selector = Selector.open(); + SocketChannel socketChannel = SocketChannel.open(); + socketChannel.configureBlocking(false); + socketChannel.register(selector, SelectionKey.OP_CONNECT); + socketChannel.connect(new InetSocketAddress(HOST, PORT)); + new Thread(() -> { + try (Scanner scanner = new Scanner(System.in)) { + System.out.println("请输入要发送的消息..."); + while (scanner.hasNextLine()) { + String message = scanner.nextLine(); + if (message.length() > 0) { + socketChannel.write(CHARSET.encode(message)); + } + } + } catch (IOException e) { + System.err.println("发送消息时发生错误: " + e.getMessage()); + } + }).start(); + + while (true) { + if (selector.select() == 0) continue; + Iterator iterator = selector.selectedKeys().iterator(); + while (iterator.hasNext()) { + SelectionKey key = iterator.next(); + iterator.remove(); + if (key.isConnectable()) { + handleConnect(key, selector); + } else if (key.isReadable()) { + handleRead(key); + } + } + } + } catch (IOException e) { + System.err.println("客户端运行时发生错误: " + e.getMessage()); + } + } + private static void handleConnect(SelectionKey key, Selector selector) throws IOException { + SocketChannel channel = (SocketChannel) key.channel(); + if (channel.isConnectionPending()) { + channel.finishConnect(); + } + channel.configureBlocking(false); + channel.register(selector, SelectionKey.OP_READ); + System.out.println("成功连接到聊天服务器!"); + } + private static void handleRead(SelectionKey key) throws IOException { + SocketChannel channel = (SocketChannel) key.channel(); + ByteBuffer buffer = ByteBuffer.allocate(1024); + StringBuilder content = new StringBuilder(); + try { + int readBytes = channel.read(buffer); + if (readBytes > 0) { + buffer.flip(); + content.append(CHARSET.decode(buffer)); + System.out.println(content.toString()); + } else if (readBytes == -1) { + System.out.println("服务器已关闭连接。"); + key.cancel(); + channel.close(); + System.exit(0); + } + } catch (IOException e) { + System.out.println("读取服务器消息时出错,连接已断开。"); + key.cancel(); + channel.close(); + System.exit(1); + } + } +} \ No newline at end of file diff --git a/Final/src/nio/NioChatServer.java b/Final/src/nio/NioChatServer.java new file mode 100644 index 0000000..99ea7b1 --- /dev/null +++ b/Final/src/nio/NioChatServer.java @@ -0,0 +1,109 @@ +package nio; + +import java.io.IOException; +import java.net.InetSocketAddress; +import java.nio.ByteBuffer; +import java.nio.channels.SelectionKey; +import java.nio.channels.Selector; +import java.nio.channels.ServerSocketChannel; +import java.nio.channels.SocketChannel; +import java.nio.charset.Charset; +import java.util.Iterator; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.UUID; + +public class NioChatServer { + private static final int PORT = 8080; + private static final String HOST = "127.0.0.1"; + private static final Charset CHARSET = Charset.forName("UTF-8"); + private static final ConcurrentHashMap clients = new ConcurrentHashMap<>(); + public static void main(String[] args) { + try { + Selector selector = Selector.open(); + ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); + serverSocketChannel.bind(new InetSocketAddress(HOST, PORT)); + serverSocketChannel.configureBlocking(false); + serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT); + System.out.println("聊天服务器已启动,监听端口:" + PORT); + while (true) { + if (selector.select() == 0) continue; + Set selectedKeys = selector.selectedKeys(); + Iterator iterator = selectedKeys.iterator(); + while (iterator.hasNext()) { + SelectionKey key = iterator.next(); + iterator.remove(); + if (key.isAcceptable()) { + handleAccept(key, selector); + } else if (key.isReadable()) { + handleRead(key); + } + } + } + } catch (IOException e) { + System.err.println("服务器运行时发生错误: " + e.getMessage()); + } + } + private static void handleAccept(SelectionKey key, Selector selector) throws IOException { + ServerSocketChannel serverChannel = (ServerSocketChannel) key.channel(); + SocketChannel clientChannel = serverChannel.accept(); + clientChannel.configureBlocking(false); + SelectionKey clientKey = clientChannel.register(selector, SelectionKey.OP_READ); + String clientId = UUID.randomUUID().toString(); + clients.put(clientId, clientChannel); + clientKey.attach(clientId); + System.out.println("客户端 [" + clientChannel.getRemoteAddress() + "] 连接成功。"); + broadcastMessage("系统消息:欢迎 " + clientChannel.getRemoteAddress() + " 加入聊天室!当前在线人数:" + clients.size()); + } + private static void handleRead(SelectionKey key) { + SocketChannel clientChannel = (SocketChannel) key.channel(); + ByteBuffer buffer = ByteBuffer.allocate(1024); + StringBuilder content = new StringBuilder(); + try { + int readBytes = clientChannel.read(buffer); + if (readBytes > 0) { + buffer.flip(); + content.append(CHARSET.decode(buffer)); + String receivedMessage = content.toString(); + String address = clientChannel.getRemoteAddress().toString(); + String broadcastMsg = "来自 " + address + " 的消息: " + receivedMessage; + System.out.println(broadcastMsg); + broadcastMessage(broadcastMsg, clientChannel); + } else if (readBytes == -1) { + disconnectClient(key); + } + } catch (IOException e) { + disconnectClient(key); + } + } + private static void broadcastMessage(String message) { + broadcastMessage(message, null); + } + private static void broadcastMessage(String message, SocketChannel excludeChannel) { + for (SocketChannel channel : clients.values()) { + if (channel.isOpen() && (excludeChannel == null || !channel.equals(excludeChannel))) { + try { + channel.write(CHARSET.encode(message)); + } catch (IOException e) { + System.err.println("向客户端发送消息失败: " + e.getMessage()); + } + } + } + } + private static void disconnectClient(SelectionKey key) { + String clientId = (String) key.attachment(); + SocketChannel clientChannel = (SocketChannel) key.channel(); + try { + String address = clientChannel.getRemoteAddress().toString(); + key.cancel(); + clientChannel.close(); + if (clientId != null) { + clients.remove(clientId); + } + System.out.println("客户端 [" + address + "] 已断开连接。"); + broadcastMessage("系统消息:" + address + " 离开了聊天室。当前在线人数:" + clients.size()); + } catch (IOException e) { + System.err.println("关闭客户端连接时出错: " + e.getMessage()); + } + } +} \ No newline at end of file diff --git a/Final/src/nio/NioHttpServer.java b/Final/src/nio/NioHttpServer.java new file mode 100644 index 0000000..ff697b5 --- /dev/null +++ b/Final/src/nio/NioHttpServer.java @@ -0,0 +1,84 @@ +package nio; + +import java.io.IOException; +import java.net.InetSocketAddress; +import java.nio.ByteBuffer; +import java.nio.channels.SelectionKey; +import java.nio.channels.Selector; +import java.nio.channels.ServerSocketChannel; +import java.nio.channels.SocketChannel; +import java.nio.charset.StandardCharsets; +import java.util.Iterator; +import java.util.Set; + +public class NioHttpServer { + private static final int PORT = 8081; + private static final String HOST = "127.0.0.1"; + public static void main(String[] args) { + try { + Selector selector = Selector.open(); + ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); + serverSocketChannel.bind(new InetSocketAddress(HOST, PORT)); + serverSocketChannel.configureBlocking(false); + serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT); + System.out.println("HTTP服务器已启动,监听端口:" + PORT); + while (true) { + if (selector.select(3000) == 0) { + continue; + } + Set selectedKeys = selector.selectedKeys(); + Iterator keyIterator = selectedKeys.iterator(); + while (keyIterator.hasNext()) { + SelectionKey key = keyIterator.next(); + keyIterator.remove(); + + if (key.isAcceptable()) { + handleAccept(key, selector); + } + if (key.isReadable()) { + handleRead(key); + } + } + } + } catch (IOException e) { + System.err.println("HTTP服务器运行时发生错误: " + e.getMessage()); + } + } + private static void handleAccept(SelectionKey key, Selector selector) throws IOException { + ServerSocketChannel serverChannel = (ServerSocketChannel) key.channel(); + SocketChannel clientChannel = serverChannel.accept(); + clientChannel.configureBlocking(false); + clientChannel.register(selector, SelectionKey.OP_READ); + System.out.println("接收到新的HTTP连接:" + clientChannel.getRemoteAddress()); + } + private static void handleRead(SelectionKey key) throws IOException { + SocketChannel clientChannel = (SocketChannel) key.channel(); + ByteBuffer buffer = ByteBuffer.allocate(1024); + try { + int bytesRead = clientChannel.read(buffer); + if (bytesRead > 0) { + buffer.flip(); + byte[] bytes = new byte[buffer.remaining()]; + buffer.get(bytes); + String request = new String(bytes, StandardCharsets.UTF_8); + System.out.println("接收到HTTP请求:\n" + request); + + String responseBody = "

Hello NIO!

这是一个基于Java NIO的HTTP服务器响应。

"; + String httpResponse = "HTTP/1.1 200 OK\r\n" + + "Content-Type: text/html; charset=utf-8\r\n" + + "Content-Length: " + responseBody.getBytes(StandardCharsets.UTF_8).length + "\r\n" + + "\r\n" + + responseBody; + ByteBuffer responseBuffer = ByteBuffer.wrap(httpResponse.getBytes(StandardCharsets.UTF_8)); + clientChannel.write(responseBuffer); + } + } catch (IOException e) { + System.err.println("处理请求时发生错误: " + e.getMessage()); + } finally { + if (clientChannel != null) { + clientChannel.close(); + } + key.cancel(); + } + } +} \ No newline at end of file diff --git a/Homework0520/.gitignore b/Homework0520/.gitignore new file mode 100644 index 0000000..f68d109 --- /dev/null +++ b/Homework0520/.gitignore @@ -0,0 +1,29 @@ +### IntelliJ IDEA ### +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/Homework0520/.idea/.gitignore b/Homework0520/.idea/.gitignore new file mode 100644 index 0000000..7d05e99 --- /dev/null +++ b/Homework0520/.idea/.gitignore @@ -0,0 +1,10 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# 依赖于环境的 Maven 主目录路径 +/mavenHomeManager.xml +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/Homework0520/.idea/misc.xml b/Homework0520/.idea/misc.xml new file mode 100644 index 0000000..6f29fee --- /dev/null +++ b/Homework0520/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Homework0520/.idea/modules.xml b/Homework0520/.idea/modules.xml new file mode 100644 index 0000000..d33bab6 --- /dev/null +++ b/Homework0520/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/Homework0520/.idea/vcs.xml b/Homework0520/.idea/vcs.xml new file mode 100644 index 0000000..d843f34 --- /dev/null +++ b/Homework0520/.idea/vcs.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Homework0520/Homework0520.iml b/Homework0520/Homework0520.iml new file mode 100644 index 0000000..c90834f --- /dev/null +++ b/Homework0520/Homework0520.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Homework0520/src/BufferBasicOperations.java b/Homework0520/src/BufferBasicOperations.java new file mode 100644 index 0000000..f03a61e --- /dev/null +++ b/Homework0520/src/BufferBasicOperations.java @@ -0,0 +1,62 @@ +import java.nio.ByteBuffer; + +public class BufferBasicOperations { + public static void main(String[] args) { + // 创建一个容量为10的ByteBuffer + ByteBuffer buffer = ByteBuffer.allocate(10); + System.out.println("初始状态:"); + printBufferStatus(buffer); + + // 向缓冲区依次写入字节1, 2, 3, 4, 5 + buffer.put((byte) 1); + buffer.put((byte) 2); + buffer.put((byte) 3); + buffer.put((byte) 4); + buffer.put((byte) 5); + System.out.println("\n写入数据后:"); + printBufferStatus(buffer); + + // 切换为读模式 + buffer.flip(); + System.out.println("\n切换为读模式后(flip):"); + printBufferStatus(buffer); + + // 读取并打印所有数据 + System.out.println("\n读取的数据:"); + while (buffer.hasRemaining()) { + byte data = buffer.get(); + System.out.print(data + " "); + } + System.out.println(); + + System.out.println("\n读取完成后:"); + printBufferStatus(buffer); + + // 清空缓冲区 + buffer.clear(); + System.out.println("\n清空缓冲区后(clear):"); + printBufferStatus(buffer); + + // 验证是否可重新写入 + buffer.put((byte) 100); + buffer.put((byte) 200); + System.out.println("\n重新写入数据后:"); + printBufferStatus(buffer); + + // 验证重新写入的数据 + buffer.flip(); + System.out.println("\n验证重新写入的数据:"); + while (buffer.hasRemaining()) { + System.out.print(buffer.get() + " "); + } + System.out.println(); + } + + // 打印缓冲区状态 + private static void printBufferStatus(ByteBuffer buffer) { + System.out.println("Position: " + buffer.position() + + ", Limit: " + buffer.limit() + + ", Capacity: " + buffer.capacity() + + ", Remaining: " + buffer.remaining()); + } +} \ No newline at end of file diff --git a/Homework0520/src/BufferFlipCompact.java b/Homework0520/src/BufferFlipCompact.java new file mode 100644 index 0000000..cff4c9e --- /dev/null +++ b/Homework0520/src/BufferFlipCompact.java @@ -0,0 +1,65 @@ +import java.nio.CharBuffer; + +public class BufferFlipCompact { + public static void main(String[] args) { + // 创建一个容量为8的CharBuffer + CharBuffer buffer = CharBuffer.allocate(8); + System.out.println("初始状态:"); + printBufferStatus(buffer); + + // 写入字符串"Hello" + buffer.put("Hello"); + System.out.println("\n写入'Hello'后:"); + printBufferStatus(buffer); + + // 翻转缓冲区准备读取 + buffer.flip(); + System.out.println("\n翻转缓冲区后(flip):"); + printBufferStatus(buffer); + + // 读取前3个字符('H', 'e', 'l') + System.out.println("\n读取前3个字符:"); + for (int i = 0; i < 3; i++) { + char c = buffer.get(); + System.out.print(c + " "); + } + System.out.println(); + + System.out.println("\n读取3个字符后:"); + printBufferStatus(buffer); + + // 压缩缓冲区 + buffer.compact(); + System.out.println("\n压缩缓冲区后(compact):"); + printBufferStatus(buffer); + + // 再写入"World" + buffer.put("World"); + System.out.println("\n写入'World'后:"); + printBufferStatus(buffer); + + // 翻转并打印最终缓冲区内容 + buffer.flip(); + System.out.println("\n最终缓冲区内容:"); + while (buffer.hasRemaining()) { + System.out.print(buffer.get()); + } + System.out.println(); + + // 显示完整的缓冲区内容(包括未读取的部分) + buffer.rewind(); // 回到开始位置 + System.out.println("\n完整缓冲区内容:"); + while (buffer.hasRemaining()) { + System.out.print(buffer.get()); + } + System.out.println(); + } + + // 打印缓冲区状态 + private static void printBufferStatus(CharBuffer buffer) { + System.out.println("Position: " + buffer.position() + + ", Limit: " + buffer.limit() + + ", Capacity: " + buffer.capacity() + + ", Remaining: " + buffer.remaining()); + } +} \ No newline at end of file diff --git a/Homework0520/src/BufferMarkInvalid.java b/Homework0520/src/BufferMarkInvalid.java new file mode 100644 index 0000000..8a92c6b --- /dev/null +++ b/Homework0520/src/BufferMarkInvalid.java @@ -0,0 +1,105 @@ +import java.nio.IntBuffer; +import java.nio.InvalidMarkException; + +public class BufferMarkInvalid { + public static void main(String[] args) { + // 创建一个容量为3的IntBuffer + IntBuffer buffer = IntBuffer.allocate(3); + System.out.println("初始状态:"); + printBufferStatus(buffer); + + // 依次写入10、20 + buffer.put(10); + buffer.put(20); + System.out.println("\n写入10、20后:"); + printBufferStatus(buffer); + + // 在写入20后调用mark() + buffer.mark(); + System.out.println("\n调用mark()后 (position=2):"); + printBufferStatus(buffer); + + // 写入30 + buffer.put(30); + System.out.println("\n写入30后:"); + printBufferStatus(buffer); + + // 调用reset(),验证是否能成功 + try { + buffer.reset(); + System.out.println("\n第一次reset()成功:"); + printBufferStatus(buffer); + System.out.println("mark仍然有效,position回到标记位置2"); + } catch (InvalidMarkException e) { + System.out.println("\n第一次reset()失败: " + e.getMessage()); + } + + // 清空缓冲区 + buffer.clear(); + System.out.println("\n清空缓冲区后(clear):"); + printBufferStatus(buffer); + + // 再次调用reset(),观察是否抛出InvalidMarkException + try { + buffer.reset(); + System.out.println("\nclear()后reset()成功 - 这不应该发生!"); + printBufferStatus(buffer); + } catch (InvalidMarkException e) { + System.out.println("\nclear()后reset()失败 (预期行为):"); + System.out.println("抛出InvalidMarkException: " + e.getMessage()); + System.out.println("原因: clear()方法会丢弃mark标记"); + } + + // 演示其他会使mark失效的操作 + System.out.println("\n--- 演示其他使mark失效的场景 ---"); + + // 重新设置数据和标记 + buffer.clear(); + buffer.put(100).put(200); + buffer.mark(); // 在position=2处标记 + buffer.put(300); + + System.out.println("重新设置数据和标记后:"); + printBufferStatus(buffer); + + // 测试rewind()是否影响mark + buffer.rewind(); + System.out.println("\n调用rewind()后:"); + printBufferStatus(buffer); + + try { + buffer.reset(); + System.out.println("rewind()后reset()成功 - mark依然有效"); + printBufferStatus(buffer); + } catch (InvalidMarkException e) { + System.out.println("rewind()后reset()失败: " + e.getMessage()); + } + + // 测试flip()是否影响mark + buffer.clear(); + buffer.put(1000).put(2000); + buffer.mark(); // 标记 + buffer.put(3000); + + buffer.flip(); // 准备读取 + System.out.println("\n调用flip()后:"); + printBufferStatus(buffer); + + try { + buffer.reset(); + System.out.println("flip()后reset()成功"); + printBufferStatus(buffer); + } catch (InvalidMarkException e) { + System.out.println("flip()后reset()失败: " + e.getMessage()); + System.out.println("说明: flip()会丢弃mark标记"); + } + } + + // 打印缓冲区状态 + private static void printBufferStatus(IntBuffer buffer) { + System.out.println("Position: " + buffer.position() + + ", Limit: " + buffer.limit() + + ", Capacity: " + buffer.capacity() + + ", Remaining: " + buffer.remaining()); + } +} \ No newline at end of file diff --git a/Homework0520/src/BufferMarkReset.java b/Homework0520/src/BufferMarkReset.java new file mode 100644 index 0000000..62011b7 --- /dev/null +++ b/Homework0520/src/BufferMarkReset.java @@ -0,0 +1,95 @@ +import java.nio.CharBuffer; + +public class BufferMarkReset { + public static void main(String[] args) { + // 创建一个容量为5的CharBuffer + CharBuffer buffer = CharBuffer.allocate(5); + System.out.println("初始状态:"); + printBufferStatus(buffer); + + // 写入字符A + buffer.put('A'); + System.out.println("\n写入字符A后:"); + printBufferStatus(buffer); + + // 写入字符B + buffer.put('B'); + System.out.println("\n写入字符B后:"); + printBufferStatus(buffer); + + // 在写入B后调用mark()方法,此时position是2 + buffer.mark(); + System.out.println("\n调用mark()后 (position=2):"); + printBufferStatus(buffer); + + // 继续写入C、D、E直到缓冲区满 + buffer.put('C'); + buffer.put('D'); + buffer.put('E'); + System.out.println("\n继续写入C、D、E后:"); + printBufferStatus(buffer); + + // 调用reset()方法,验证position是否回到标记位置 + buffer.reset(); + System.out.println("\n调用reset()后:"); + printBufferStatus(buffer); + System.out.println("验证: position已回到标记位置 2"); + + // 从position 2开始重新读取并打印后续字符 + // 首先需要调整limit以便能够读取 + buffer.limit(5); // 设置limit为容量,允许读取到末尾 + System.out.println("\n从position 2开始读取后续字符:"); + while (buffer.hasRemaining()) { + char c = buffer.get(); + System.out.print("字符: " + c + " (position: " + buffer.position() + ")\n"); + } + + // 演示完整的读取过程 + System.out.println("\n--- 完整演示 ---"); + buffer.clear(); // 重置缓冲区 + + // 重新写入数据 + buffer.put('A').put('B'); + buffer.mark(); // 在position=2处标记 + buffer.put('C').put('D').put('E'); + + // 切换到读模式 + buffer.flip(); + System.out.println("切换到读模式后:"); + printBufferStatus(buffer); + + // 读取所有数据以验证内容 + System.out.println("完整内容:"); + while (buffer.hasRemaining()) { + System.out.print(buffer.get() + " "); + } + System.out.println(); + + // 注意:flip()方法会丢弃标记,所以需要重新设置 + // 将position设置到想要标记的位置,然后调用mark() + buffer.position(2); // 移动到位置2 + buffer.mark(); // 重新标记 + System.out.println("\n重新设置标记在position=2:"); + printBufferStatus(buffer); + + // 使用reset回到标记位置 + buffer.reset(); + System.out.println("\n使用reset()回到标记位置:"); + printBufferStatus(buffer); + + // 从标记位置开始读取 + System.out.println("从标记位置开始读取:"); + while (buffer.hasRemaining()) { + System.out.print(buffer.get() + " "); + } + System.out.println(); + } + + // 打印缓冲区状态 + private static void printBufferStatus(CharBuffer buffer) { + System.out.println("Position: " + buffer.position() + + ", Limit: " + buffer.limit() + + ", Capacity: " + buffer.capacity() + + ", Remaining: " + buffer.remaining()); + } +} \ No newline at end of file diff --git a/Homework0520/src/BufferMarkerReader.java b/Homework0520/src/BufferMarkerReader.java new file mode 100644 index 0000000..3c87547 --- /dev/null +++ b/Homework0520/src/BufferMarkerReader.java @@ -0,0 +1,163 @@ +import java.nio.ByteBuffer; + +public class BufferMarkerReader { + + /** + * 使用ByteBuffer读取一段字节数据的方法 + * 在读取到特定字节(如0xFF)时设置标记 + * 继续读取后续字节,直到遇到下一个0xFF + * 若未找到第二个0xFF,则回退到标记位置 + * + * @param buffer 要读取的ByteBuffer + * @param marker 标记字节,默认为0xFF + * @return 读取的字节数组,如果回退则返回null + */ + public static byte[] readWithMarker(ByteBuffer buffer, byte marker) { + if (!buffer.hasRemaining()) { + System.out.println("缓冲区没有剩余数据可读"); + return null; + } + + // 查找第一个标记字节 + boolean firstMarkerFound = false; + int markPosition = -1; + + // 寻找第一个0xFF + while (buffer.hasRemaining()) { + byte currentByte = buffer.get(); + if (currentByte == marker) { + firstMarkerFound = true; + markPosition = buffer.position() - 1; // 标记字节的位置 + buffer.mark(); // 在找到第一个标记后设置mark + System.out.println("找到第一个标记字节 0xFF,位置: " + markPosition); + System.out.println("设置标记,当前position: " + buffer.position()); + break; + } + } + + if (!firstMarkerFound) { + System.out.println("未找到第一个标记字节 0xFF"); + return null; + } + + // 收集从第一个标记到第二个标记之间的数据 + ByteBuffer tempBuffer = ByteBuffer.allocate(buffer.remaining() + 1); + tempBuffer.put(marker); // 包含第一个标记字节 + + // 继续读取,寻找第二个标记字节 + boolean secondMarkerFound = false; + while (buffer.hasRemaining()) { + byte currentByte = buffer.get(); + tempBuffer.put(currentByte); + + if (currentByte == marker) { + secondMarkerFound = true; + System.out.println("找到第二个标记字节 0xFF,位置: " + (buffer.position() - 1)); + break; + } + } + + if (secondMarkerFound) { + // 找到第二个标记,返回两个标记之间的数据(包含标记字节) + tempBuffer.flip(); + byte[] result = new byte[tempBuffer.remaining()]; + tempBuffer.get(result); + System.out.println("成功读取数据,长度: " + result.length); + return result; + } else { + // 未找到第二个标记,回退到第一个标记位置 + try { + buffer.reset(); + System.out.println("未找到第二个标记字节,回退到标记位置"); + System.out.println("回退后的position值: " + buffer.position()); + return null; + } catch (Exception e) { + System.out.println("回退失败: " + e.getMessage()); + return null; + } + } + } + + public static void main(String[] args) { + // 测试用例1:包含两个0xFF的数据 + System.out.println("=== 测试用例1:包含两个0xFF的数据 ==="); + byte[] testData1 = {0x01, 0x02, (byte)0xFF, 0x03, 0x04, 0x05, (byte)0xFF, 0x06, 0x07}; + ByteBuffer buffer1 = ByteBuffer.wrap(testData1); + + System.out.println("原始数据:"); + printByteArray(testData1); + System.out.println("初始buffer状态:"); + printBufferStatus(buffer1); + + byte[] result1 = readWithMarker(buffer1, (byte)0xFF); + if (result1 != null) { + System.out.println("读取结果:"); + printByteArray(result1); + } + System.out.println("最终buffer状态:"); + printBufferStatus(buffer1); + + System.out.println("\n=== 测试用例2:只有一个0xFF的数据 ==="); + byte[] testData2 = {0x01, 0x02, (byte)0xFF, 0x03, 0x04, 0x05, 0x06}; + ByteBuffer buffer2 = ByteBuffer.wrap(testData2); + + System.out.println("原始数据:"); + printByteArray(testData2); + System.out.println("初始buffer状态:"); + printBufferStatus(buffer2); + + byte[] result2 = readWithMarker(buffer2, (byte)0xFF); + if (result2 != null) { + System.out.println("读取结果:"); + printByteArray(result2); + } + System.out.println("最终buffer状态:"); + printBufferStatus(buffer2); + + System.out.println("\n=== 测试用例3:没有0xFF的数据 ==="); + byte[] testData3 = {0x01, 0x02, 0x03, 0x04, 0x05}; + ByteBuffer buffer3 = ByteBuffer.wrap(testData3); + + System.out.println("原始数据:"); + printByteArray(testData3); + + byte[] result3 = readWithMarker(buffer3, (byte)0xFF); + if (result3 != null) { + System.out.println("读取结果:"); + printByteArray(result3); + } + + System.out.println("\n=== 测试用例4:连续的0xFF ==="); + byte[] testData4 = {0x01, (byte)0xFF, (byte)0xFF, 0x02, 0x03}; + ByteBuffer buffer4 = ByteBuffer.wrap(testData4); + + System.out.println("原始数据:"); + printByteArray(testData4); + + byte[] result4 = readWithMarker(buffer4, (byte)0xFF); + if (result4 != null) { + System.out.println("读取结果:"); + printByteArray(result4); + } + } + + // 辅助方法:打印字节数组 + private static void printByteArray(byte[] array) { + System.out.print("["); + for (int i = 0; i < array.length; i++) { + System.out.printf("0x%02X", array[i]); + if (i < array.length - 1) { + System.out.print(", "); + } + } + System.out.println("]"); + } + + // 打印缓冲区状态 + private static void printBufferStatus(ByteBuffer buffer) { + System.out.println("Position: " + buffer.position() + + ", Limit: " + buffer.limit() + + ", Capacity: " + buffer.capacity() + + ", Remaining: " + buffer.remaining()); + } +} \ No newline at end of file diff --git a/Homework0520/src/BufferVerificationAndThinking.java b/Homework0520/src/BufferVerificationAndThinking.java new file mode 100644 index 0000000..b0f0f87 --- /dev/null +++ b/Homework0520/src/BufferVerificationAndThinking.java @@ -0,0 +1,245 @@ +import java.nio.ByteBuffer; +import java.nio.CharBuffer; + +public class BufferVerificationAndThinking { + + public static void main(String[] args) { + // (1)如何判断缓冲区是否还有剩余空间? + testRemainingSpace(); + + System.out.println("\n" + "=".repeat(60)); + + // (2)flip() 和 rewind() 的区别 + testFlipVsRewind(); + + System.out.println("\n" + "=".repeat(60)); + + // (3)直接缓冲区与非直接缓冲区的性能差异 + testDirectVsNonDirectBuffer(); + } + + /** + * (1)测试如何判断缓冲区是否还有剩余空间 + */ + private static void testRemainingSpace() { + System.out.println("=== (1)测试缓冲区剩余空间判断 ==="); + + ByteBuffer buffer = ByteBuffer.allocate(5); + System.out.println("创建容量为5的ByteBuffer:"); + printBufferInfo(buffer); + + // 写入数据测试剩余空间 + System.out.println("\n逐步写入数据,观察剩余空间变化:"); + for (int i = 1; i <= 6; i++) { + if (buffer.hasRemaining()) { + buffer.put((byte) i); + System.out.println("写入字节 " + i + " 后:"); + printBufferInfo(buffer); + } else { + System.out.println("尝试写入字节 " + i + ": 缓冲区已满,无法写入"); + printBufferInfo(buffer); + break; + } + } + + // 切换到读模式测试剩余数据 + buffer.flip(); + System.out.println("\n切换到读模式后:"); + printBufferInfo(buffer); + + System.out.println("\n逐步读取数据,观察剩余数据变化:"); + while (buffer.hasRemaining()) { + byte data = buffer.get(); + System.out.println("读取字节 " + data + " 后:"); + printBufferInfo(buffer); + } + + if (!buffer.hasRemaining()) { + System.out.println("所有数据已读取完毕"); + } + } + + /** + * (2)测试flip()和rewind()的区别 + */ + private static void testFlipVsRewind() { + System.out.println("=== (2)flip() 和 rewind() 的区别 ==="); + + CharBuffer buffer = CharBuffer.allocate(10); + + // 写入一些数据 + buffer.put("Hello"); + System.out.println("写入'Hello'后的状态:"); + printBufferInfo(buffer); + + // 测试flip() + System.out.println("\n--- 测试flip()方法 ---"); + CharBuffer buffer1 = buffer.duplicate(); // 创建副本用于测试 + buffer1.flip(); + System.out.println("调用flip()后:"); + printBufferInfo(buffer1); + System.out.println("flip()的作用: position->0, limit->原position值, 准备从头读取已写入的数据"); + + // 读取数据验证flip的效果 + System.out.println("使用flip()后读取数据:"); + while (buffer1.hasRemaining()) { + System.out.print(buffer1.get()); + } + System.out.println(); + printBufferInfo(buffer1); + + // 测试rewind() + System.out.println("\n--- 测试rewind()方法 ---"); + CharBuffer buffer2 = buffer.duplicate(); // 创建副本用于测试 + buffer2.rewind(); + System.out.println("调用rewind()后:"); + printBufferInfo(buffer2); + System.out.println("rewind()的作用: position->0, limit保持不变, 重新从头开始"); + + // 使用rewind后的缓冲区 + System.out.println("使用rewind()后尝试读取数据 (limit仍为capacity):"); + int readCount = 0; + while (buffer2.hasRemaining() && readCount < 5) { // 只读5个字符,避免读取未初始化数据 + char c = buffer2.get(); + if (c != 0) { // 只打印非零字符 + System.out.print(c); + } + readCount++; + } + System.out.println(); + + // 关键区别总结 + System.out.println("\n--- 关键区别总结 ---"); + System.out.println("flip(): position=0, limit=原position (准备读取已写入的数据)"); + System.out.println("rewind(): position=0, limit=不变 (重新开始,但limit通常是capacity)"); + System.out.println("使用场景:"); + System.out.println(" flip() - 写模式切换到读模式"); + System.out.println(" rewind() - 重新读取整个缓冲区或重新写入"); + } + + /** + * (3)测试直接缓冲区与非直接缓冲区的性能差异 + */ + private static void testDirectVsNonDirectBuffer() { + System.out.println("=== (3)直接缓冲区与非直接缓冲区的性能测试 ==="); + + int bufferSize = 1024 * 1024; // 1MB + int iterations = 1000; + + // 创建直接缓冲区和非直接缓冲区 + ByteBuffer directBuffer = ByteBuffer.allocateDirect(bufferSize); + ByteBuffer heapBuffer = ByteBuffer.allocate(bufferSize); + + System.out.println("缓冲区大小: " + bufferSize + " 字节"); + System.out.println("测试迭代次数: " + iterations); + System.out.println(); + + // 检查缓冲区类型 + System.out.println("直接缓冲区检查: " + directBuffer.isDirect()); + System.out.println("堆缓冲区检查: " + heapBuffer.isDirect()); + System.out.println(); + + // 测试写入性能 + System.out.println("--- 写入性能测试 ---"); + + // 测试直接缓冲区写入性能 + long startTime = System.nanoTime(); + for (int i = 0; i < iterations; i++) { + directBuffer.clear(); + for (int j = 0; j < bufferSize; j++) { + directBuffer.put((byte) (j % 256)); + } + } + long directWriteTime = System.nanoTime() - startTime; + + // 测试堆缓冲区写入性能 + startTime = System.nanoTime(); + for (int i = 0; i < iterations; i++) { + heapBuffer.clear(); + for (int j = 0; j < bufferSize; j++) { + heapBuffer.put((byte) (j % 256)); + } + } + long heapWriteTime = System.nanoTime() - startTime; + + System.out.println("直接缓冲区写入时间: " + (directWriteTime / 1_000_000) + " ms"); + System.out.println("堆缓冲区写入时间: " + (heapWriteTime / 1_000_000) + " ms"); + System.out.println("写入性能比: " + String.format("%.2f", (double) heapWriteTime / directWriteTime)); + + // 测试读取性能 + System.out.println("\n--- 读取性能测试 ---"); + + // 准备数据 + directBuffer.clear(); + heapBuffer.clear(); + for (int i = 0; i < bufferSize; i++) { + byte value = (byte) (i % 256); + directBuffer.put(value); + heapBuffer.put(value); + } + + // 测试直接缓冲区读取性能 + startTime = System.nanoTime(); + for (int i = 0; i < iterations; i++) { + directBuffer.flip(); + while (directBuffer.hasRemaining()) { + directBuffer.get(); + } + directBuffer.rewind(); + } + long directReadTime = System.nanoTime() - startTime; + + // 测试堆缓冲区读取性能 + startTime = System.nanoTime(); + for (int i = 0; i < iterations; i++) { + heapBuffer.flip(); + while (heapBuffer.hasRemaining()) { + heapBuffer.get(); + } + heapBuffer.rewind(); + } + long heapReadTime = System.nanoTime() - startTime; + + System.out.println("直接缓冲区读取时间: " + (directReadTime / 1_000_000) + " ms"); + System.out.println("堆缓冲区读取时间: " + (heapReadTime / 1_000_000) + " ms"); + System.out.println("读取性能比: " + String.format("%.2f", (double) heapReadTime / directReadTime)); + + // 性能差异原因分析 + System.out.println("\n--- 性能差异原因分析 ---"); + System.out.println("1. 内存分配位置:"); + System.out.println(" 直接缓冲区: 分配在JVM堆外的本地内存中"); + System.out.println(" 非直接缓冲区: 分配在JVM堆内存中"); + + System.out.println("\n2. I/O操作效率:"); + System.out.println(" 直接缓冲区: 减少一次内存拷贝 (本地内存 -> 系统调用)"); + System.out.println(" 非直接缓冲区: 需要额外拷贝 (JVM堆 -> 本地内存 -> 系统调用)"); + + System.out.println("\n3. 垃圾回收影响:"); + System.out.println(" 直接缓冲区: 不受GC直接影响,但清理较复杂"); + System.out.println(" 非直接缓冲区: 受GC影响,但分配和释放更快"); + + System.out.println("\n4. 使用建议:"); + System.out.println(" 直接缓冲区: 适用于长期存在、频繁I/O操作的大缓冲区"); + System.out.println(" 非直接缓冲区: 适用于短期、小规模的内存操作"); + + // 内存使用情况 + System.out.println("\n--- 内存使用情况 ---"); + Runtime runtime = Runtime.getRuntime(); + System.out.println("JVM堆内存使用情况:"); + System.out.println(" 最大内存: " + (runtime.maxMemory() / 1024 / 1024) + " MB"); + System.out.println(" 总内存: " + (runtime.totalMemory() / 1024 / 1024) + " MB"); + System.out.println(" 空闲内存: " + (runtime.freeMemory() / 1024 / 1024) + " MB"); + System.out.println(" 已用内存: " + ((runtime.totalMemory() - runtime.freeMemory()) / 1024 / 1024) + " MB"); + } + + /** + * 打印缓冲区详细信息 + */ + private static void printBufferInfo(java.nio.Buffer buffer) { + System.out.println(" Position: " + buffer.position() + + " | Limit: " + buffer.limit() + + " | Capacity: " + buffer.capacity() + + " | Remaining: " + buffer.remaining() + + " | HasRemaining: " + buffer.hasRemaining()); + } +} \ No newline at end of file diff --git a/Homework0520/src/TicketSystem.java b/Homework0520/src/TicketSystem.java new file mode 100644 index 0000000..8cec726 --- /dev/null +++ b/Homework0520/src/TicketSystem.java @@ -0,0 +1,142 @@ +import java.util.concurrent.locks.ReentrantLock; + +public class TicketSystem { + private int ticketCount = 100; // 初始票数 + private final ReentrantLock lock = new ReentrantLock(); // 可重入锁 + private int totalSold = 0; // 已售票数统计 + + /** + * 卖票方法 - 线程安全 + * + * @param sellerId 售票员ID + * @return true表示成功卖出一张票,false表示没有票了 + */ + public boolean sellTicket(String sellerId) { + lock.lock(); // 获取锁 + try { + if (ticketCount > 0) { + // 模拟卖票过程的耗时 + try { + Thread.sleep(10); // 模拟卖票耗时 + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + + ticketCount--; + totalSold++; + int currentTicket = 100 - ticketCount; // 当前卖出的是第几张票 + + System.out.println(sellerId + " 卖出第 " + currentTicket + " 张票,剩余票数: " + ticketCount); + return true; + } else { + System.out.println(sellerId + " 尝试卖票,但已无票可售"); + return false; + } + } finally { + lock.unlock(); // 确保锁被释放 + } + } + + /** + * 获取剩余票数 + */ + public int getRemainingTickets() { + lock.lock(); + try { + return ticketCount; + } finally { + lock.unlock(); + } + } + + /** + * 获取已售票数 + */ + public int getTotalSold() { + lock.lock(); + try { + return totalSold; + } finally { + lock.unlock(); + } + } + + /** + * 售票员线程类 + */ + static class TicketSeller implements Runnable { + private final TicketSystem ticketSystem; + private final String sellerId; + + public TicketSeller(TicketSystem ticketSystem, String sellerId) { + this.ticketSystem = ticketSystem; + this.sellerId = sellerId; + } + + @Override + public void run() { + System.out.println(sellerId + " 开始售票"); + + while (true) { + boolean sold = ticketSystem.sellTicket(sellerId); + if (!sold) { + // 没有票了,结束售票 + break; + } + + // 模拟售票间隔 + try { + Thread.sleep(20); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + break; + } + } + + System.out.println(sellerId + " 结束售票"); + } + } + + public static void main(String[] args) { + TicketSystem ticketSystem = new TicketSystem(); + + System.out.println("=== 卖票系统启动 ==="); + System.out.println("初始票数: " + ticketSystem.getRemainingTickets()); + + // 创建3个售票员线程 + Thread seller1 = new Thread(new TicketSeller(ticketSystem, "售票员1")); + Thread seller2 = new Thread(new TicketSeller(ticketSystem, "售票员2")); + Thread seller3 = new Thread(new TicketSeller(ticketSystem, "售票员3")); + + // 启动线程 + long startTime = System.currentTimeMillis(); + seller1.start(); + seller2.start(); + seller3.start(); + + // 等待所有线程结束 + try { + seller1.join(); + seller2.join(); + seller3.join(); + } catch (InterruptedException e) { + System.out.println("主线程被中断"); + } + + long endTime = System.currentTimeMillis(); + + // 输出最终结果 + System.out.println("\n=== 售票结束 ==="); + System.out.println("剩余票数: " + ticketSystem.getRemainingTickets()); + System.out.println("已售票数: " + ticketSystem.getTotalSold()); + System.out.println("总耗时: " + (endTime - startTime) + " 毫秒"); + + // 验证结果 + if (ticketSystem.getRemainingTickets() == 0 && ticketSystem.getTotalSold() == 100) { + System.out.println("✓ 验证成功:所有票都已售出,且没有重复售票"); + } else { + System.out.println("✗ 验证失败:票数统计有误"); + } + + } +} \ No newline at end of file diff --git a/NIOChatServ/.gitignore b/NIOChatServ/.gitignore new file mode 100644 index 0000000..f68d109 --- /dev/null +++ b/NIOChatServ/.gitignore @@ -0,0 +1,29 @@ +### IntelliJ IDEA ### +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/NIOChatServ/.idea/.gitignore b/NIOChatServ/.idea/.gitignore new file mode 100644 index 0000000..7d05e99 --- /dev/null +++ b/NIOChatServ/.idea/.gitignore @@ -0,0 +1,10 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# 依赖于环境的 Maven 主目录路径 +/mavenHomeManager.xml +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/NIOChatServ/.idea/misc.xml b/NIOChatServ/.idea/misc.xml new file mode 100644 index 0000000..6f29fee --- /dev/null +++ b/NIOChatServ/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/NIOChatServ/.idea/modules.xml b/NIOChatServ/.idea/modules.xml new file mode 100644 index 0000000..3d95b3e --- /dev/null +++ b/NIOChatServ/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/NIOChatServ/.idea/vcs.xml b/NIOChatServ/.idea/vcs.xml new file mode 100644 index 0000000..d843f34 --- /dev/null +++ b/NIOChatServ/.idea/vcs.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/NIOChatServ/NIOChatServ.iml b/NIOChatServ/NIOChatServ.iml new file mode 100644 index 0000000..c90834f --- /dev/null +++ b/NIOChatServ/NIOChatServ.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/NIOChatServ/src/client/NioChatClient.java b/NIOChatServ/src/client/NioChatClient.java new file mode 100644 index 0000000..b83aa58 --- /dev/null +++ b/NIOChatServ/src/client/NioChatClient.java @@ -0,0 +1,255 @@ +package client; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.IOException; +import java.net.InetSocketAddress; +import java.nio.ByteBuffer; +import java.nio.channels.*; +import java.util.Iterator; + +public class NioChatClient extends JFrame { + + // UI 组件 + private JTextField hostField; + private JTextField portField; + private JButton connectButton; + + private JTextArea messageArea; // 显示聊天内容 + private JTextField inputField; // 输入框 + private JButton sendButton; // 发送按钮 + + // NIO相关 + private volatile SocketChannel socketChannel; + private volatile Selector selector; + private volatile boolean running = false; // 用于控制读线程 + + private Thread readThread; // 后台读取服务器消息的线程 + + public static void main(String[] args) { + SwingUtilities.invokeLater(() -> { + NioChatClient client = new NioChatClient(); + client.setVisible(true); + }); + } + + /** + * 构造UI + */ + public NioChatClient() { + super("NIO Chat Client"); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setSize(600, 400); + + // 主机、端口输入区域 + JPanel connectPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + connectPanel.add(new JLabel("服务器主机:")); + hostField = new JTextField("127.0.0.1", 10); + connectPanel.add(hostField); + + connectPanel.add(new JLabel("端口:")); + portField = new JTextField("8888", 5); + connectPanel.add(portField); + + connectButton = new JButton("连接"); + connectPanel.add(connectButton); + + // 聊天显示区域 + messageArea = new JTextArea(); + messageArea.setEditable(false); + JScrollPane scrollPane = new JScrollPane(messageArea); + + // 发送消息区域 + JPanel inputPanel = new JPanel(new BorderLayout()); + inputField = new JTextField(); + sendButton = new JButton("发送"); + + inputPanel.add(inputField, BorderLayout.CENTER); + inputPanel.add(sendButton, BorderLayout.EAST); + + // 布局 + getContentPane().setLayout(new BorderLayout()); + getContentPane().add(connectPanel, BorderLayout.NORTH); + getContentPane().add(scrollPane, BorderLayout.CENTER); + getContentPane().add(inputPanel, BorderLayout.SOUTH); + + // 按钮事件绑定 + connectButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (!running) { + connectToServer(); + } else { + disconnectFromServer(); + } + } + }); + + sendButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + sendMessage(inputField.getText().trim()); + inputField.setText(""); + } + }); + } + + /** + * 连接到服务器 + */ + private void connectToServer() { + final String host = hostField.getText().trim(); + final int port = Integer.parseInt(portField.getText().trim()); + + try { + // 打开Selector和SocketChannel + selector = Selector.open(); + socketChannel = SocketChannel.open(); + socketChannel.configureBlocking(false); + socketChannel.connect(new InetSocketAddress(host, port)); + socketChannel.register(selector, SelectionKey.OP_CONNECT); + + // 启动后台线程,处理服务器消息 + running = true; + readThread = new Thread(this::readLoop, "NioClient-ReadThread"); + readThread.start(); + + // 更新UI状态 + connectButton.setText("断开"); + appendMessage("正在连接到服务器 " + host + ":" + port + "...\n"); + } catch (IOException e) { + appendMessage("连接失败: " + e.getMessage() + "\n"); + e.printStackTrace(); + } + } + + /** + * 断开与服务器的连接 + */ + private void disconnectFromServer() { + running = false; + try { + if (socketChannel != null) { + socketChannel.close(); + } + if (selector != null) { + selector.wakeup(); + selector.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + socketChannel = null; + selector = null; + connectButton.setText("连接"); + appendMessage("已断开连接。\n"); + } + } + + /** + * 发送消息给服务器 + */ + private void sendMessage(String msg) { + if (!running || socketChannel == null || !socketChannel.isOpen()) { + appendMessage("未连接服务器,无法发送消息。\n"); + return; + } + if (msg.isEmpty()) { + return; + } + try { + socketChannel.write(ByteBuffer.wrap((msg + "\n").getBytes())); + } catch (IOException e) { + appendMessage("发送失败: " + e.getMessage() + "\n"); + e.printStackTrace(); + } + } + + /** + * 读取服务器消息的循环线程 + */ + private void readLoop() { + try { + while (running && selector != null && selector.isOpen()) { + // 阻塞等待事件 + selector.select(); + + // 处理所有就绪事件 + Iterator it = selector.selectedKeys().iterator(); + while (it.hasNext()) { + SelectionKey key = it.next(); + it.remove(); + + if (!key.isValid()) { + continue; + } + + // 处理连接完成 + if (key.isConnectable()) { + handleConnect(key); + } + + // 处理可读 + if (key.isReadable()) { + handleRead(key); + } + } + } + } catch (IOException e) { + appendMessage("读取服务器消息时出现异常: " + e.getMessage() + "\n"); + e.printStackTrace(); + } finally { + // 读线程结束时进行清理 + disconnectFromServer(); + } + } + + /** + * 处理连接完成 + */ + private void handleConnect(SelectionKey key) throws IOException { + SocketChannel sc = (SocketChannel) key.channel(); + if (sc.isConnectionPending()) { + sc.finishConnect(); + } + sc.configureBlocking(false); + sc.register(selector, SelectionKey.OP_READ); + appendMessage("已连接到服务器。\n"); + } + + /** + * 处理可读事件:从服务器接收数据 + */ + private void handleRead(SelectionKey key) throws IOException { + SocketChannel sc = (SocketChannel) key.channel(); + ByteBuffer buffer = ByteBuffer.allocate(1024); + + int readBytes = sc.read(buffer); + if (readBytes == -1) { + // 服务器端关闭 + appendMessage("服务器已断开连接。\n"); + running = false; + return; + } + + if (readBytes > 0) { + buffer.flip(); + // 按照简单文本协议,读到换行符即可作为一条消息 + String msg = new String(buffer.array(), 0, buffer.limit()).trim(); + appendMessage(msg + "\n"); + } + } + + /** + * 在UI文本框中追加消息 (线程安全) + */ + private void appendMessage(String msg) { + SwingUtilities.invokeLater(() -> { + messageArea.append(msg); + // 自动滚动到末尾 + messageArea.setCaretPosition(messageArea.getDocument().getLength()); + }); + } +} diff --git a/NIOChatServ/src/server/NioChatServer.java b/NIOChatServ/src/server/NioChatServer.java new file mode 100644 index 0000000..0b85386 --- /dev/null +++ b/NIOChatServ/src/server/NioChatServer.java @@ -0,0 +1,153 @@ +package server; + +import java.io.IOException; +import java.net.InetSocketAddress; +import java.nio.ByteBuffer; +import java.nio.channels.*; +import java.util.Iterator; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; + +public class NioChatServer { + + // 维护所有已连接的 SocketChannel + private static final ConcurrentHashMap clientMap = new ConcurrentHashMap<>(); + + public static void main(String[] args) { + // 端口可根据需要进行修改 + int port = 8888; + try (Selector selector = Selector.open(); + ServerSocketChannel serverSocketChannel = ServerSocketChannel.open()) { + + // 配置为非阻塞 + serverSocketChannel.configureBlocking(false); + // 绑定端口 + serverSocketChannel.bind(new InetSocketAddress(port)); + // 注册到 selector,监听 "接收新连接" 事件 + serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT); + + System.out.println("服务器已启动,监听端口: " + port); + + // 事件循环 + while (true) { + // 阻塞等待就绪的通道 + selector.select(); + // 获取就绪的事件集合 + Set selectionKeys = selector.selectedKeys(); + Iterator iterator = selectionKeys.iterator(); + + while (iterator.hasNext()) { + SelectionKey key = iterator.next(); + iterator.remove(); // 每次处理完一个事件后必须移除,避免重复处理 + + try { + // 处理新连接 + if (key.isAcceptable()) { + handleAccept(key, selector); + } + // 处理可读事件 + if (key.isReadable()) { + handleRead(key, selector); + } + } catch (IOException e) { + // 发生异常时关闭连接并清理 + closeChannel(key); + } + } + } + + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * 处理新客户端连接 + */ + private static void handleAccept(SelectionKey key, Selector selector) throws IOException { + ServerSocketChannel ssc = (ServerSocketChannel) key.channel(); + SocketChannel sc = ssc.accept(); + if (sc == null) { + return; + } + // 配置为非阻塞 + sc.configureBlocking(false); + // 注册到选择器中,关注读事件 + sc.register(selector, SelectionKey.OP_READ); + // 将此客户端加入管理集合(如果需要,可以存储客户端的名称/ID等信息) + clientMap.put(sc, sc.getRemoteAddress().toString()); + System.out.println("客户端连接: " + sc.getRemoteAddress()); + } + + /** + * 处理客户端发送的数据 + */ + private static void handleRead(SelectionKey key, Selector selector) throws IOException { + SocketChannel sc = (SocketChannel) key.channel(); + ByteBuffer buffer = ByteBuffer.allocate(1024); + + int readBytes = sc.read(buffer); + // 正常关闭或异常 + if (readBytes == -1) { + closeChannel(key); + return; + } + + // 如果有数据 + if (readBytes > 0) { + buffer.flip(); + String msg = new String(buffer.array(), 0, buffer.limit()).trim(); + + System.out.println("收到消息: " + msg + " 来自: " + clientMap.get(sc)); + + // 识别特殊命令 + if ("EXIT".equalsIgnoreCase(msg)) { + // 关闭连接 + System.out.println("客户端请求断开连接: " + clientMap.get(sc)); + closeChannel(key); + } else if ("PING".equalsIgnoreCase(msg)) { + // 回复 PONG + String pong = "PONG\n"; + sc.write(ByteBuffer.wrap(pong.getBytes())); + } else { + // 普通消息进行广播 + broadcastMessage(sc, msg); + } + } + } + + /** + * 向其他所有客户端广播消息 + */ + private static void broadcastMessage(SocketChannel sender, String msg) { + // 构造广播内容 + String senderInfo = clientMap.get(sender); + String broadcastMsg = "[" + senderInfo + "] " + msg + "\n"; + + // 遍历所有连接的客户端, 写入消息 + clientMap.forEach((channel, info) -> { + if (channel != sender && channel.isOpen()) { + try { + channel.write(ByteBuffer.wrap(broadcastMsg.getBytes())); + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + /** + * 关闭通道,清理资源 + */ + private static void closeChannel(SelectionKey key) { + try { + SocketChannel sc = (SocketChannel) key.channel(); + System.out.println("连接关闭: " + clientMap.get(sc)); + clientMap.remove(sc); + key.cancel(); + sc.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/example_src/.gitignore b/example_src/.gitignore new file mode 100644 index 0000000..f68d109 --- /dev/null +++ b/example_src/.gitignore @@ -0,0 +1,29 @@ +### IntelliJ IDEA ### +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/example_src/.idea/.gitignore b/example_src/.idea/.gitignore new file mode 100644 index 0000000..35410ca --- /dev/null +++ b/example_src/.idea/.gitignore @@ -0,0 +1,8 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/example_src/.idea/misc.xml b/example_src/.idea/misc.xml new file mode 100644 index 0000000..5af9c98 --- /dev/null +++ b/example_src/.idea/misc.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/example_src/.idea/modules.xml b/example_src/.idea/modules.xml new file mode 100644 index 0000000..fc2e1fa --- /dev/null +++ b/example_src/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/example_src/.idea/vcs.xml b/example_src/.idea/vcs.xml new file mode 100644 index 0000000..d843f34 --- /dev/null +++ b/example_src/.idea/vcs.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/example_src/Network_Communication.iml b/example_src/Network_Communication.iml new file mode 100644 index 0000000..c90834f --- /dev/null +++ b/example_src/Network_Communication.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/example_src/src/Bus.java b/example_src/src/Bus.java new file mode 100644 index 0000000..32003eb --- /dev/null +++ b/example_src/src/Bus.java @@ -0,0 +1,24 @@ +public class Bus implements MyPay,MyInterface2 { + + public void payMoney() { + System.out.println("Bus pay money:2元"); + + } + public void myPrint() { + System.out.println("my bus print"); + + } + public void myMethod() { + System.out.println("aggdksjal"); + } + + @Override + public void MyInter1Fun() { + + } + + @Override + public void MyInter2Fun() { + + } +} diff --git a/example_src/src/MyDemo1.java b/example_src/src/MyDemo1.java new file mode 100644 index 0000000..ccd9665 --- /dev/null +++ b/example_src/src/MyDemo1.java @@ -0,0 +1,18 @@ +class MyClass1{ + int a1; + int a2; + void myPrint(){ + System.out.println("a1 = " + a1); + } +} +class MyClass2 { + int a3; + void myPrint(){ + System.out.println("a3 = " + a3); + } +} +public class MyDemo1 extends MyClass1{ + + + +} diff --git a/example_src/src/MyInterface2.java b/example_src/src/MyInterface2.java new file mode 100644 index 0000000..49349db --- /dev/null +++ b/example_src/src/MyInterface2.java @@ -0,0 +1,3 @@ +public interface MyInterface2 { + public void myMethod(); +} diff --git a/example_src/src/MyPay.java b/example_src/src/MyPay.java new file mode 100644 index 0000000..9116316 --- /dev/null +++ b/example_src/src/MyPay.java @@ -0,0 +1,13 @@ +interface MyInter1{ + void MyInter1Fun(); +} +interface MyInter2{ + void MyInter2Fun(); + +} +public interface MyPay extends MyInter1, MyInter2 { + // int x=9; + void payMoney(); + void myPrint(); + +} diff --git a/example_src/src/MyTest1.java b/example_src/src/MyTest1.java new file mode 100644 index 0000000..1ef3ced --- /dev/null +++ b/example_src/src/MyTest1.java @@ -0,0 +1,23 @@ +public class MyTest1 { + + public static void main(String[] args) { + int a=0; + int y=100; + int z; + try{ + z=y/a; + } catch (ArithmeticException e) { + System.out.println("ArithmeticException"); + z=Integer.MAX_VALUE; + System.out.println(z); + } + + catch (Exception e) { + System.out.println("Exception"); + } + + + + } + +} \ No newline at end of file diff --git a/example_src/src/Test1.java b/example_src/src/Test1.java new file mode 100644 index 0000000..ddade1b --- /dev/null +++ b/example_src/src/Test1.java @@ -0,0 +1,32 @@ +public class Test1 implements Runnable { + public static void main(String[] args) throws InterruptedException { + System.out.println("Hello World"); + Test1 t = new Test1(); + Thread th1=new Thread(t); + th1.setName("Thread1"); + //th1.run(); + th1.start(); + + for (int i = 0; i < 10; i++) { + Thread.sleep(1000); + System.out.println("in main"); + + } + + + } + + @Override + public void run() { + for (int i = 0; i < 10; i++) { + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + // throw new RuntimeException(e); + } + System.out.println("nantongdaxue"); + System.out.println(Thread.currentThread().getName()); + } + + } +} diff --git a/example_src/src/Test2.java b/example_src/src/Test2.java new file mode 100644 index 0000000..9fbebb2 --- /dev/null +++ b/example_src/src/Test2.java @@ -0,0 +1,14 @@ +public class Test2 { + public static void main(String[] args) { + int a = 0; + int y; + try{ + y=3/a; + }catch(ArithmeticException e){ + System.out.println("ArithmeticException"); + y=Integer.MAX_VALUE; + } + + System.out.println(y); + } +} diff --git a/example_src/src/Test3.java b/example_src/src/Test3.java new file mode 100644 index 0000000..6073b53 --- /dev/null +++ b/example_src/src/Test3.java @@ -0,0 +1,39 @@ + +class MyThread extends Thread{ + public void run(){ + for(int i=0;i<10;i++){ + try { + Thread.sleep(1000); + }catch(InterruptedException e){ + System.out.println("InterruptedException"); + } + + System.out.println("in myThread:"+Thread.currentThread().getName()); + + } + + } +} + + +public class Test3 { + public static void main(String[] args) throws InterruptedException { + MyThread t1=new MyThread(); + t1.setName("t1"); + t1.start(); + + MyThread t2=new MyThread(); + t2.setName("t2"); + t2.start(); + + for (int i = 0; i < 10; i++) { + Thread.sleep(1000); + System.out.println("in main:"+Thread.currentThread().getName()); + + } + + } + + + +} diff --git a/example_src/src/abc/C1.java b/example_src/src/abc/C1.java new file mode 100644 index 0000000..075ff4a --- /dev/null +++ b/example_src/src/abc/C1.java @@ -0,0 +1,21 @@ +package abc; + +public class C1 extends Thread{ + private char ch; + private PrintCH pc; + + public C1(char ch, PrintCH pc) { + this.ch = ch; this.pc=pc; + } + public void run(){ + pc.print(ch); + } + public static void main(String[] args) { + PrintCH pc1=new PrintCH(); + PrintCH pc2=new PrintCH(); + C1 t1=new C1('A',pc2); + C1 t2=new C1('B',pc2); + t1.start(); + t2.start(); + } +} diff --git a/example_src/src/abc/PrintCH.java b/example_src/src/abc/PrintCH.java new file mode 100644 index 0000000..01c3931 --- /dev/null +++ b/example_src/src/abc/PrintCH.java @@ -0,0 +1,14 @@ +package abc; + +public class PrintCH { + public synchronized void print(char c){ + for(int i=0;i<4;i++){ + System.out.print(c); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } +} diff --git a/example_src/src/hk1/hk1.iml b/example_src/src/hk1/hk1.iml new file mode 100644 index 0000000..6db0c46 --- /dev/null +++ b/example_src/src/hk1/hk1.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/example_src/src/hk1/src/demo1/MainTest.java b/example_src/src/hk1/src/demo1/MainTest.java new file mode 100644 index 0000000..fc33b06 --- /dev/null +++ b/example_src/src/hk1/src/demo1/MainTest.java @@ -0,0 +1,18 @@ +package demo1; + +public class MainTest { + public static void main(String[] args) { + MyThread1 t1 = new MyThread1(); + Thread myt1 = new Thread(t1); + myt1.start(); + + + MyThread2 t2 = new MyThread2(); + t2.start(); + + System.out.println("this is a main function"); + + + + } +} diff --git a/example_src/src/hk1/src/demo1/MyThread1.java b/example_src/src/hk1/src/demo1/MyThread1.java new file mode 100644 index 0000000..274e07e --- /dev/null +++ b/example_src/src/hk1/src/demo1/MyThread1.java @@ -0,0 +1,19 @@ +package demo1; + +public class MyThread1 implements Runnable { + + public void run() { + for (int i = 0; i < 10; i++) { + System.out.println("this is a car"); + try { + Thread.sleep(500); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + + + + + } +} diff --git a/example_src/src/hk1/src/demo1/MyThread2.java b/example_src/src/hk1/src/demo1/MyThread2.java new file mode 100644 index 0000000..8efb859 --- /dev/null +++ b/example_src/src/hk1/src/demo1/MyThread2.java @@ -0,0 +1,16 @@ +package demo1; + +public class MyThread2 extends Thread { + public void run() { + for (int i = 0; i < 10; i++) { + System.out.println("this is a bus"); + try { + Thread.sleep(500); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + + } + +} diff --git a/example_src/src/hk2/hk2.iml b/example_src/src/hk2/hk2.iml new file mode 100644 index 0000000..6db0c46 --- /dev/null +++ b/example_src/src/hk2/hk2.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/example_src/src/hk2/src/Main.java b/example_src/src/hk2/src/Main.java new file mode 100644 index 0000000..d5238c9 --- /dev/null +++ b/example_src/src/hk2/src/Main.java @@ -0,0 +1,5 @@ +public class Main { + public static void main(String[] args) { + System.out.println("Hello, World!"); + } +} \ No newline at end of file diff --git a/example_src/src/pk1/MyTest.java b/example_src/src/pk1/MyTest.java new file mode 100644 index 0000000..f760de2 --- /dev/null +++ b/example_src/src/pk1/MyTest.java @@ -0,0 +1,22 @@ +package pk1; +public class MyTest extends Thread{ + private char ch; + private PrintCH2 myprint; + public MyTest(char ch, PrintCH2 myprint){ + this.ch = ch; + this.myprint = myprint; + } + public void run(){ + synchronized(myprint){ + myprint.print(ch); + } + myprint.print(ch); + } + public static void main(String[] args){ + PrintCH2 printch2 = new PrintCH2(); + MyTest t1 = new MyTest('A', myprint); + MyTest t2 = new MyTest('B', myprint); + t1.start(); + t2.start(); + } +} diff --git a/example_src/src/pk1/pk2/MyThread1.java b/example_src/src/pk1/pk2/MyThread1.java new file mode 100644 index 0000000..2bfa72e --- /dev/null +++ b/example_src/src/pk1/pk2/MyThread1.java @@ -0,0 +1,49 @@ +package pk1.pk2; +class Thread3 implements Runnable { + public void run(){ + System.out.println("in thread3"); + + } + +} + class MyThread2 extends Thread { + public void run() { + for (int i = 0; i < 10; i++) { + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + System.out.println("in MyThread2"+Thread.currentThread().getName()); + } + + } + + +} + +public class MyThread1 { + public static void main(String[] args) throws InterruptedException { + MyThread2 t = new MyThread2(); + t.setName("Thread2"); + t.start(); + Thread t2 = new Thread(t); + t2.setName("Thread3"); + t2.start(); + System.out.println(t2.isAlive()); + System.out.println(t.isAlive()); + + Thread3 th3 = new Thread3(); + Thread myth3 = new Thread(th3); + myth3.setName("MyThread3"); + myth3.start(); + + // Thread myth6 = new Thread("aba"); + + + for (int i = 0; i < 10; i++) { + Thread.sleep(1000); + System.out.println("nantongdaxue"); + } + } +} diff --git a/onetoone/.gitignore b/onetoone/.gitignore new file mode 100644 index 0000000..f68d109 --- /dev/null +++ b/onetoone/.gitignore @@ -0,0 +1,29 @@ +### IntelliJ IDEA ### +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/onetoone/.idea/.gitignore b/onetoone/.idea/.gitignore new file mode 100644 index 0000000..7d05e99 --- /dev/null +++ b/onetoone/.idea/.gitignore @@ -0,0 +1,10 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# 依赖于环境的 Maven 主目录路径 +/mavenHomeManager.xml +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/onetoone/.idea/misc.xml b/onetoone/.idea/misc.xml new file mode 100644 index 0000000..5af9c98 --- /dev/null +++ b/onetoone/.idea/misc.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/onetoone/.idea/modules.xml b/onetoone/.idea/modules.xml new file mode 100644 index 0000000..ce6635c --- /dev/null +++ b/onetoone/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/onetoone/.idea/runConfigurations/MyClient.xml b/onetoone/.idea/runConfigurations/MyClient.xml new file mode 100644 index 0000000..a182385 --- /dev/null +++ b/onetoone/.idea/runConfigurations/MyClient.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/onetoone/.idea/runConfigurations/MyServer.xml b/onetoone/.idea/runConfigurations/MyServer.xml new file mode 100644 index 0000000..fd8ac96 --- /dev/null +++ b/onetoone/.idea/runConfigurations/MyServer.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/onetoone/.idea/uiDesigner.xml b/onetoone/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/onetoone/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/onetoone/.idea/vcs.xml b/onetoone/.idea/vcs.xml new file mode 100644 index 0000000..d843f34 --- /dev/null +++ b/onetoone/.idea/vcs.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/onetoone/onetoone.iml b/onetoone/onetoone.iml new file mode 100644 index 0000000..c90834f --- /dev/null +++ b/onetoone/onetoone.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/onetoone/src/ClientThread.java b/onetoone/src/ClientThread.java new file mode 100644 index 0000000..59a3a13 --- /dev/null +++ b/onetoone/src/ClientThread.java @@ -0,0 +1,63 @@ +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import java.net.Socket; +import java.nio.charset.StandardCharsets; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; + +public class ClientThread extends Thread { + private final MyServer serverDialog; // 添加Server1的引用 + private Socket toClientSocket = null;// 会话套接字 + private BufferedReader in; // 网络输入流 + private PrintWriter out; // 网络输出流 + private int clientCounts = 0;// 在线客户机总数 + + public ClientThread(Socket toClientSocket, int clientCounts, MyServer serverDialog) { // 构造函数 + this.toClientSocket = toClientSocket; + this.clientCounts = clientCounts; + this.serverDialog = serverDialog; + } // 保存Server1的引用 + + @Override + public void run() { + try { + // 创建绑定到套接字toClientSocket上的网络输入流与输出流 + in = new BufferedReader(new InputStreamReader(toClientSocket.getInputStream(), StandardCharsets.UTF_8)); + out = new PrintWriter(new OutputStreamWriter(toClientSocket.getOutputStream(), StandardCharsets.UTF_8), true); + // 5. 根据服务器协议,在网络流上进行读写操作 + String recvStr; + while ((recvStr = in.readLine()) != null) { // 只要客户机不关闭,则反复等待和接收客户机消息 + Date date = new Date(); + DateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); + String time = format.format(date); + //ServerUI.txtArea.append(toClientSocket.getRemoteSocketAddress() + " 客户机编号: " + clientCounts + " 消息:" + // + recvStr + " :" + time + "\n"); // 解析并显示收到的消息 + // 按照echo协议原封不动回送消息 + + String message = toClientSocket.getRemoteSocketAddress() + " 客户机编号: " + clientCounts + " 消息:" + recvStr + " :" + time + "\n"; + + // 使用Server1的公开方法来更新txtArea + if (serverDialog != null) { + serverDialog.appendToTextArea(message); + } + + + out.println(toClientSocket.getLocalSocketAddress() + " 客户机编号: " + clientCounts + " Echo消息:" + recvStr + + " : " + time); + } // end while + // ServerUI.clientCounts--; // 客户机总数减1 + // 远程客户机断开连接,线程释放资源 + if (in != null) + in.close(); + if (out != null) + out.close(); + if (toClientSocket != null) + toClientSocket.close(); + } catch (Exception ex) { + System.out.println(ex.getMessage()); + } + } // end run +} diff --git a/onetoone/src/MyClient.form b/onetoone/src/MyClient.form new file mode 100644 index 0000000..58f4556 --- /dev/null +++ b/onetoone/src/MyClient.form @@ -0,0 +1,151 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/onetoone/src/MyClient.java b/onetoone/src/MyClient.java new file mode 100644 index 0000000..d0f000f --- /dev/null +++ b/onetoone/src/MyClient.java @@ -0,0 +1,118 @@ +import javax.swing.*; +import java.awt.event.*; +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.net.Socket; +import java.net.SocketAddress; + +public class MyClient extends JDialog { + private JPanel contentPane; + private JPanel top; + private JTextField txtRemoteName; + private JTextField txtRemotePort; + private JPanel line1; + private JPanel line2; + private JTextField txtInput; + private JButton btnConnect; + private JButton btnSpeak; + private JPanel buttom; + private JTextArea txtArea; + + private Socket clientSocket = null; // 声明客户机套接字 + private BufferedReader in; // 声明网络输入流 + private PrintWriter out; // 声明网络输出流 + + public MyClient() { + setContentPane(contentPane); + setModal(true); + + // 点击 X 时调用 onCancel() + setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + onCancel(); + } + }); + + // 遇到 ESCAPE 时调用 onCancel() + contentPane.registerKeyboardAction(new ActionListener() { + public void actionPerformed(ActionEvent e) { + onCancel(); + } + }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); + btnConnect.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + try { + // 获取服务器参数 + String remoteName = txtRemoteName.getText(); + int remotePort = Integer.parseInt(txtRemotePort.getText()); + // 构建服务器Socket格式的地址 + SocketAddress remoteAddr = new InetSocketAddress(InetAddress.getByName(remoteName), remotePort); + // 1. 创建套接字clientSocket并连接到远程服务器 + clientSocket = new Socket(); + clientSocket.connect(remoteAddr); + txtArea.append("连接服务器成功,会话开始...\n"); + // 2. 创建绑定到套接字clientSocket上的网络输入流与输出流 + out = new PrintWriter(new OutputStreamWriter(clientSocket.getOutputStream(), "UTF-8"), true); + in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream(), "UTF-8")); + + } catch (Exception ex) { + JOptionPane.showMessageDialog(null, ex.getMessage(), "连接错误", JOptionPane.ERROR_MESSAGE); + return; + } + btnConnect.setEnabled(false); + } + }); + btnSpeak.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + // 3. 根据服务器协议,在网络流上进行读写操作 + if (clientSocket == null) { + JOptionPane.showMessageDialog(null, "请先检查服务器连接情况。\n发言之前要确保客户机连接到服务器!", "错误提示", + JOptionPane.ERROR_MESSAGE); + return; + } + // 获取待发消息 + String outStr = txtInput.getText(); + if (outStr.isEmpty()) { // 待发消息框为空 + JOptionPane.showMessageDialog(null, "请输入发送消息!", "提示", JOptionPane.INFORMATION_MESSAGE); + return; + } + // 发送 + out.println(outStr); + txtInput.setText(""); + try { + // 按照echo协议,客户机应立即接收服务器回送消息 + String inStr; + inStr = in.readLine(); + // 收到的echo消息加入下面的文本框 + txtArea.append("Echo: " + inStr + "\n"); + } catch (Exception ex) { + JOptionPane.showMessageDialog(null, "客户机接收消息错误!", "错误提示", JOptionPane.ERROR_MESSAGE); + } + } + }); + } + + private void onOK() { + // 在此处添加您的代码 + dispose(); + } + + private void onCancel() { + // 必要时在此处添加您的代码 + dispose(); + } + + public static void main(String[] args) { + MyClient dialog = new MyClient(); + dialog.pack(); + dialog.setVisible(true); + System.exit(0); + } +} diff --git a/onetoone/src/MyServer.form b/onetoone/src/MyServer.form new file mode 100644 index 0000000..f5bd584 --- /dev/null +++ b/onetoone/src/MyServer.form @@ -0,0 +1,107 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/onetoone/src/MyServer.java b/onetoone/src/MyServer.java new file mode 100644 index 0000000..421e6c7 --- /dev/null +++ b/onetoone/src/MyServer.java @@ -0,0 +1,110 @@ +import javax.swing.*; +import java.awt.event.*; +import java.io.IOException; +import java.net.*; + +public class MyServer extends JDialog { + private JPanel contentPane; + private JButton buttonOK; + private JButton buttonCancel; + private JTextField txtHostName; + private JTextField txtHostPort; + private JButton btnStart; + private JPanel bottom; + private JPanel top; + private JPanel middle; + private JTextArea txtArea; + + private ServerSocket listenSocket = null; // 侦听套接字 + private Socket toClientSocket = null; // 与客户机对话的套接字 + public static int clientCounts = 0; // 客户数量编号 + + public void appendToTextArea(final String text) { + //这段代码定义了一个用于更新JTextArea的方法,它确保UI更新在事件调度线程(EDT)上执行,避免了线程安全问题。 + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + txtArea.append(text); + } + }); + } + + public MyServer() { + setContentPane(contentPane); + setModal(true); + getRootPane().setDefaultButton(buttonOK); + + // 点击 X 时调用 onCancel() + setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + onCancel(); + } + }); + + // 遇到 ESCAPE 时调用 onCancel() + contentPane.registerKeyboardAction(new ActionListener() { + public void actionPerformed(ActionEvent e) { + onCancel(); + } + }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); + btnStart.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + try { + btnStart.setEnabled(false); + String hostName = txtHostName.getText();// 主机名 + int hostPort = Integer.parseInt(txtHostPort.getText());// 端口 + // 构建服务器的SocketAddress格式地址 + SocketAddress serverAddr = new InetSocketAddress(InetAddress.getByName(hostName), hostPort); + listenSocket = new ServerSocket(); // 创建侦听套接字 + listenSocket.bind(serverAddr); // 绑定到工作地址 + txtArea.append("服务器开始等待客户机连接...\n"); + } catch (Exception ex) { + JOptionPane.showMessageDialog(null, ex.getMessage(), "错误提示", JOptionPane.ERROR_MESSAGE); + return; + } + + // 创建一个匿名线程,用于侦听和接受客户机连接,并创建响应客户机的会话线程 + Thread serverThread = new Thread(new Runnable() { + @Override + public void run() { + try { + while (true) { // 处理客户机连接 + toClientSocket = listenSocket.accept();// 侦听并接受客户机连接 + clientCounts++;// 客户机数量加1 + txtArea.append(toClientSocket.getRemoteSocketAddress() + " 客户机编号: " + clientCounts + + " 会话开始...\n"); + // 创建客户线程clientThread,实现一客户一线程 + Thread clientThread = new ClientThread(toClientSocket, clientCounts,MyServer.this); + clientThread.start(); // 启动任务线程 + } // end while + } catch (IOException ex) { + JOptionPane.showMessageDialog(null, ex.getMessage(), "错误提示", JOptionPane.ERROR_MESSAGE); + } + }// end run() + }); + serverThread.start(); + } + }); + } + + private void onCancel() { + // 必要时在此处添加您的代码 + try { + if (listenSocket != null) { + listenSocket.close(); // 关闭侦听套接字 + txtArea.append("服务器停止侦听客户机连接...\n"); + } + } catch (IOException ex) { + } + dispose(); + } + + public static void main(String[] args) { + MyServer dialog = new MyServer(); + dialog.pack(); + dialog.setVisible(true); + System.exit(0); + } +} diff --git a/物联网234 张顾皓 2330110900 第一次作业.docx b/物联网234 张顾皓 2330110900 第一次作业.docx new file mode 100644 index 0000000000000000000000000000000000000000..17ba1199ebf697150e8f4d33463993bb3a11181a GIT binary patch literal 62135 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

aJ_Vz7Hh>1 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 literal 0 HcmV?d00001 diff --git a/物联网234 张顾皓 2330110900 第二次作业.docx b/物联网234 张顾皓 2330110900 第二次作业.docx new file mode 100644 index 0000000000000000000000000000000000000000..34be86ca209541973ba807c7bcf54ee744f025fe GIT binary patch literal 52752 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 literal 0 HcmV?d00001 diff --git a/物联网234班 2330110900号 张顾皓 期末考核作业2025.docx b/物联网234班 2330110900号 张顾皓 期末考核作业2025.docx new file mode 100644 index 0000000000000000000000000000000000000000..95f5a677322a06bf32efb18887b31d41286ed2f3 GIT binary patch literal 136815 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 SUZhHYwA^lOfJ&U{KdgF#13%w< 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 literal 0 HcmV?d00001