4.18学习总结

多线程补充

等待唤醒机制

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决Error in writing header file of the driver

在源代码里面更新了一批常规的内容&#xff0c;编译的时候遇到一个error&#xff0c;一大片都是红的。XXX是项目名称。 Description Resource Path Location Type Generator: ERROR: Error in writing header file of the driver XXX Cpu Processor Expert Problem 表面意思是…

【学习】Jmeter、postman、python如何与数据库相互配合

在当今数字化时代&#xff0c;数据库已经成为我们日常生活中不可或缺的一部分。无论是购物、社交还是工作&#xff0c;数据库都在默默地为我们提供着高效、稳定的服务。而在众多的技术工具中&#xff0c;Jmeter、Postman和Python成为了操作数据库的三大主流技术。今天&#xff…

【嵌入式DIY实例】-指纹锁

DIY指纹锁 文章目录 DIY指纹锁1、硬件准备1.1 R307指纹传感器模介绍2、硬件接线原理图3、代码实现在这个项目中,我们将使用 Arduino 构建一个指纹门锁安全系统。 该系统可用于我们的家庭、办公室等提供安全保障。 我们还可以用它来打开门,只需将手指放在门锁上即可。 安全是许…

4.19作业 驱动开发

一、编程要求 在内[[核中不支持浮点类型打印将si7006硬件数据读取到内核空间&#xff0c;拷贝到用户空间在i2c子系统驱动中&#xff0c;需要编写读取温湿度传感器函数在probe函数中 注册字符设备驱动(分步注册)自动创建设备节点通过ioctl函数判断应用层发送命令码&#xff0c;…

Linux管道共享内存

前言 进程虽然是独立运行的个体&#xff0c;但它们之间有时候需要协作才能完成一项工作&#xff0c;比如有两个进程需要同步数据&#xff0c;进程 A 把数据准备好后&#xff0c;想把数据发往进程 B&#xff0c;进程 B 必须被提前通知有数据即将到来&#xff0c;或者进程 A 想发…

项目七:学会使用python爬虫解析库(小白大成级)

前期我们学会了怎么使用python爬虫请求库和解析库的简单应用和了解&#xff0c;同时能够对爬虫有一个较为清晰的体系&#xff0c;毕竟简单的爬虫基本上都是请求数据——解析数据——存储数据的大概流程。 那么回忆一下&#xff0c;请求库我们学的是requests模块&#xff0c;解…

项目管理-项目开发计划介绍

目录 一、内容总览 二、项目开发计划概述 2.1 概述 2.2 项自开发计划的目的和作用 2.3 项目开发计划的内容 2.3.1 工作计划 2.3.2 人员组织计划 2.3.3 设备采购和资源供应计划 2.3.4 配置管理计划 2.3.5 进度安排计划 2.3.6 成本投资计划 2.3.7 质量保证计划 2.3.8…

Linux 磁盘分区详解以及知识点分解

Linux 磁盘分区 主要命令解释 lsblk&#xff1a;查看磁盘信息&#xff0c;这个命令后面可以直接跟设备名 blkid&#xff1a;查看UUID&#xff08;全局单一标识符&#xff09;和查看文件系统&#xff0c;这个命令后面要跟分区号 fdisk&#xff1a;fdisk命令工具默认将磁盘划分…

实现I.MX6ULL开发板与Windows和Ubuntu系统之间的通信

虚拟机与主机之间的连接方式确实包括桥接模式、NAT模式和仅主机模式。 桥接模式&#xff08;Bridged&#xff09;&#xff1a;在桥接模式下&#xff0c;虚拟机通过虚拟交换机直接连接到主机的物理网络上&#xff0c;就像一台独立的物理机器一样&#xff0c;拥有自己的IP地址&a…

[阅读笔记23][JAM]JOINTLY TRAINING LARGE AUTOREGRESSIVE MULTIMODAL MODELS

这篇论文是24年1月发表的&#xff0c;然后是基于的RA-CM3和CM3Leon这两篇论文。它所提出的JAM结构系统地融合了现有的文本模型和图像生成模型。 主要有两点贡献&#xff0c;第一点是提出了融合两个模型的方法&#xff0c;第二点是为混合模型精心设计的指令微调策略。 下图是一个…

Unity射击游戏开发教程:(1)玩家控制

玩家的移动 玩家控制和移动是视频游戏中最酷的事情之一,因为你正在控制游戏中的某些东西 现在游戏中的玩家是我们的蓝色方块英雄。我在游戏开发中了解到,游戏是用简单的对象制作原型,然后添加所有漂亮的艺术和声音。代码… 我们要做的第一件事是在游戏开始时为玩家提供一个…

MATLAB 体素滤波(62)

MATLAB 体素滤波(62) 一、算法介绍二、算法实现1.代码(已验证,直接运行)一、算法介绍 这里的代码完成文件读入,体素滤波,效果显示,结果输出的操作,下面是效果截图,后面是代码。 体素滤波(Voxel Filtering)是一种用于三维点云数据处理的方法,其原理类似于二维图像…

力扣HOT100 - 142. 环形链表 II

解题思路&#xff1a; public class Solution {public ListNode detectCycle(ListNode head) {Set<ListNode> set new HashSet<>();while (head ! null) {if (!set.add(head)) {return head;}head head.next;}return null;} }

广西建筑模版厂家批发供应,当天发货全国可达

近年来&#xff0c;建筑行业蓬勃发展&#xff0c;对高质量的建筑模板需求量逐渐增加。在这个竞争激烈的市场中&#xff0c;贵港市能强优品木业有限公司以其出色的产品和卓越的服务迅速崭露头角&#xff0c;成为知名的建筑模板生产厂家。 作为一家拥有25年生产经验的公司&#x…

(SpringBoot)第十二章第一节:Spring事务和@Transactioal

文章目录 一:回顾事务的基本概念(1)事务A:定义B:事务的定义(2)事务的四个特性——ACIDA:数据库的ACID①:原子性(Atomicity)②:一致性(Consistency)③:隔离性(Isolation)④:持续性(Durability)B:破坏ACID的因素二:Spring

用FRP配置toml文件搭建内网穿透

需求场景 1、一台外网可访问的有固定ip的云服务器&#xff0c;Ubuntu系统 2、一台外网无法访问的无固定ip的本地家用电脑&#xff0c;Ubuntu系统 需求&#xff1a;将云服务器搭建为一台内网穿透服务器&#xff0c;实现通过外网访问家用电脑&#xff08;网页&#xff09;的功能。…

人工智能|机器学习——基于机器学习的信用卡办卡意愿模型预测项目

一、背景介绍 在金融领域&#xff0c;了解客户的信用卡办卡意愿对于银行和金融机构至关重要。借助机器学习技术&#xff0c;我们可以根据客户的历史数据和行为模式预测其是否有办理信用卡的倾向。本项目通过Python中的机器学习库&#xff0c;构建了两个常用的分类模型&#xff…

服务器使用-三丰云

网址&#xff1a;https://www.sanfengyun.com 部署bot使用&#xff1a;三丰云免费云服务器 bot&#xff1a;tx官方bot&#xff0c;使用 python 的 sdk 服务器体验&#xff1a;部署在云服务器上可以长期运行&#xff0c;使用宝塔面板操作方便&#xff0c;流畅&#xff0c;未出…

视频号的7个引流方式

一、账号简介引流 1、获客场景&#xff1a;账号简介相当于一张名片&#xff0c;几乎所有用户进入你的账号后&#xff0c;必然先要看简介 2、优势&#xff1a;相比于抖音、快手等短视频平台&#xff0c;视频号引流私域的路径更短&#xff0c;而且在微信端内有着得天独厚的优势…

Android JNI使用dlopen动态链接库

dlopen 是一个用于在系统中动态加载共享库&#xff08;动态链接库&#xff09;的函数。它的主要作用是在程序运行时动态地加载共享库&#xff0c;使得程序可以在不重新编译的情况下加载并使用库中的函数和变量。 具体来说&#xff0c;dlopen 函数可以接受一个共享库的路径作为…