4.18学习总结

news/2024/10/21 7:47:59/

多线程补充

等待唤醒机制

现在有两条线程在运行,其中一条线程可以创造一个特殊的数据供另一条线程使用,但这个数据的创建也有要求:在同一时间只允许有一个这样的特殊数据,那么我们要怎样去完成呢?如果用普通的多线程在理想环境下(也就是两个线程分别每个抢到一次)可以完成,但是很多时候没有这么美好,如果任意一个线程连续运行就会发生错误。我们可以让线程在运行的时候去判断这个特殊数据是否存在,然后再去根据这个结果去运行程序或是放弃占用CPU让另一个线程运行就行了。

例子:

public class dask {//有就是1,没有就是0;public static int food=0;//消耗十次public static int sum=10;public static Object lock=new Object();
}
public class cread implements Runnable{@Overridepublic void run() {while(true){synchronized (dask.lock){if(dask.sum==0&&dask.food==0) {break;} else {if(dask.food==0){dask.food=1;System.out.println("做了一个数据");dask.lock.notifyAll();}else{try {dask.lock.wait();} catch (InterruptedException e) {throw new RuntimeException(e);}}}}}}
}
public class food implements Runnable{@Overridepublic void run() {while(true){synchronized (dask.lock){if(dask.sum==0&&dask.food==0) {break;} else {if(dask.food==1){dask.sum--;dask.food=0;System.out.println("还可以使用"+dask.sum+"次");dask.lock.notifyAll();}else{try {dask.lock.wait();} catch (InterruptedException e) {throw new RuntimeException(e);}}}}}}
}
public class Main {public static void main(String[] args) {food food=new food();Thread thread=new Thread(food);thread.start();cread cread=new cread();Thread thread1=new Thread(cread);thread1.start();}
}

网络编程

import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;public class TCPin implements Runnable{private final Socket socket;private final String name;public TCPin(Socket socket, String name) {this.socket = socket;this.name = name;}@Overridepublic void run() {TCPout tcPout=new TCPout(socket,name);Thread thread= new Thread(tcPout);thread.start();char []chars=new char[1000];while(true){InputStreamReader inputStreamReader= null;try {inputStreamReader = new InputStreamReader(socket.getInputStream());} catch (IOException e) {throw new RuntimeException(e);}int x;try {x=inputStreamReader.read(chars);} catch (IOException e) {throw new RuntimeException(e);}System.out.println(new String(chars,0,x));}}}
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;public class TCPout implements Runnable{private final Socket socket;private final String name;public TCPout(Socket socket, String name) {this.socket = socket;this.name = name;}@Overridepublic void run() {Scanner scanner=new Scanner(System.in);OutputStream outputStream= null;try {outputStream = socket.getOutputStream();} catch (IOException e) {throw new RuntimeException(e);}while(true){String s=name+":\t"+scanner.nextLine();try {outputStream.write(s.getBytes());} catch (IOException e) {throw new RuntimeException(e);}}}}
import java.io.IOException;
import java.net.Socket;public class TCPclient {public static void main(String[] args) throws IOException {Socket socket = new Socket("127.0.0.1", 1080);TCPin tcPin=new TCPin(socket,"用户1");tcPin.run();}
}
import java.io.IOException;
import java.net.Socket;public class TCPclient1 {public static void main(String[] args) throws IOException {Socket socket = new Socket("127.0.0.1", 1080);TCPin tcPin=new TCPin(socket,"用户2");tcPin.run();}
}
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;public class serverin implements Runnable{private final Socket socket;private final String name;public serverin(Socket socket, String name) {this.socket = socket;this.name = name;}@Overridepublic void run() {char []chars=new char[1000];while(true){InputStreamReader inputStreamReader= null;try {inputStreamReader = new InputStreamReader(socket.getInputStream());} catch (IOException e) {throw new RuntimeException(e);}int x;try {x=inputStreamReader.read(chars);} catch (IOException e) {throw new RuntimeException(e);}System.out.println(new String(chars,0,x));}}}
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Scanner;public class TCPserver {public static void main(String[] args) throws IOException {ServerSocket serverSocket=new ServerSocket(1080);ArrayList<Socket> s=new ArrayList<>();int x=0;while(true){Socket socket=serverSocket.accept();s.add(socket);System.out.println(x);Thread thread=new Thread(new serverin(socket,"服务器"));thread.start();x++;if(x==2)break;}Scanner scanner=new Scanner(System.in);OutputStream outputStream= null;while(true) {String b = "服务器" + ":\t" + scanner.nextLine();for (int i = 0; i < s.size(); i++) {try {outputStream = s.get(i).getOutputStream();} catch (IOException e) {throw new RuntimeException(e);}try {outputStream.write(b.getBytes());} catch (IOException e) {throw new RuntimeException(e);}}}}
}

该程序实现了多个客户端与服务端的多次通信。


http://www.ppmy.cn/news/1427687.html

相关文章

友思特应用 | 红外视角的延伸:短波红外相机的机器视觉应用

导读 短波红外SWIR在不同波段针对不同材料的独特成像特征为各领域检测应用的拓宽提供了基础。本文将展现短波红外成像技术在水分检测、塑料检测、太阳能电池板检查和矿场开采等领域的丰富应用案例&#xff0c;讨论短波红外相机在未来的发展方向。 SWIR 背景简介 短波红外 &am…

实战:通用二进制格式安装 MySQL(mysql-5.7.29)-2024.4.6(测试成功)

目录 文章目录 目录实验环境下载url安装相关包准备用户准备二进制程序准备环境变量准备配置文件生成数据库文件,并提取root密码准备服务脚本和启动修改口令测试登录安全初始化&#xff08;可选&#xff09;shell一键安装关于我最后 实验环境 mysql-5.7.29 centos7.6 1810软件位…

高频前端面试题汇总之Vue篇

1. Vue的基本原理 当一个Vue实例创建时&#xff0c;Vue会遍历data中的属性&#xff0c;用 Object.defineProperty&#xff08;vue3.0使用proxy &#xff09;将它们转为 getter/setter&#xff0c;并且在内部追踪相关依赖&#xff0c;在属性被访问和修改时通知变化。 每个组件实…

Linux 安装 Docker +Docker Compose + cucker/get_command_4_run_container

TIP&#xff1a;下面演示的 Linux 系统为 CentOS 7.9。 Docker 更新你的系统并安装必要的依赖项&#xff1a; sudo yum update -y sudo yum install -y yum-utils device-mapper-persistent-data lvm2添加 Docker 的官方仓库&#xff1a; sudo yum-config-manager --add-rep…

es安装中文分词器

下载地址&#xff0c;尽量选择和自己本地es差不多的版本 https://github.com/infinilabs/analysis-ik/releases 下载好&#xff0c;解压&#xff0c;把里面的文件放到es的plugins/ik目录下 把plugin-descriptor.properties文件里的es版本改成自己对应的 再启动es&#xff0c;能…

FlinkSQL State的生命周期

FlinkSQL未显示配置state生命周期 FlinkSQL默认没有配置state 的过期时间。也就是说默认情况是FlinkSQL从不清除状态。如果状态后端保存在rocksdb中&#xff0c;直到本地磁盘被打满&#xff0c;服务挂掉&#xff0c;报错如下&#xff1a; java.io.IOException: [bf3ba881614e…

【linux】centos7 开机 进单用户模式修改root密码

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…

5G网络架构;6G网络架构

目录 5G和6G架构 6G网络架构 5G和6G架构 在设计和功能上有显著的区别,这主要体现在它们各自的核心特点、优势和应用场景上。 5G技术架构的核心特点包括高速率与低延迟、大容量与高密度以及网络切片。高速率与低延迟极大地提升了用户体验,支持更多实时应用和大规模数据传输…