.分别运用Runnable和Callable接口实现线程 2.分别运用同步代码段、同步方法和同步锁的方法实现线程同步 3.实验UDP协议实现用户信息的发送和接受功能 4.运用TCP协议实现向服务器上传文件

时间: 2023-11-27 08:53:47 浏览: 52
1. 分别运用Runnable和Callable接口实现线程: Runnable接口是Java中定义线程的标准方式,它只有一个run()方法,线程执行的代码就在这个方法里。Callable接口也是Java中定义线程的一种方式,它也只有一个call()方法,与run()方法不同的是,call()方法可以返回一个结果。 使用Runnable接口实现线程: ``` public class MyRunnable implements Runnable { public void run() { // 线程执行的代码 } } // 创建线程并启动 MyRunnable myRunnable = new MyRunnable(); Thread thread = new Thread(myRunnable); thread.start(); ``` 使用Callable接口实现线程: ``` public class MyCallable implements Callable<Integer> { public Integer call() throws Exception { // 线程执行的代码 return 123; } } // 创建线程并启动 MyCallable myCallable = new MyCallable(); FutureTask<Integer> futureTask = new FutureTask<>(myCallable); Thread thread = new Thread(futureTask); thread.start(); // 获取线程执行结果 int result = futureTask.get(); ``` 2. 分别运用同步代码段、同步方法和同步锁的方法实现线程同步: 同步代码段: ``` public class MyRunnable implements Runnable { private int count = 0; private Object lock = new Object(); public void run() { synchronized (lock) { for (int i = 0; i < 10000; i++) { count++; } } } } ``` 同步方法: ``` public class MyRunnable implements Runnable { private int count = 0; public synchronized void run() { for (int i = 0; i < 10000; i++) { count++; } } } ``` 同步锁: ``` public class MyRunnable implements Runnable { private int count = 0; private Lock lock = new ReentrantLock(); public void run() { lock.lock(); try { for (int i = 0; i < 10000; i++) { count++; } } finally { lock.unlock(); } } } ``` 3. 实验UDP协议实现用户信息的发送和接受功能: UDP是一种无连接的传输协议,它不需要建立连接就可以发送数据包。UDP协议使用的是面向无连接的通信模式,它不保证数据传输的可靠性。在Java中,使用DatagramSocket和DatagramPacket类来实现UDP协议的数据发送和接收。 发送端代码: ``` public class UDPSender { public static void main(String[] args) throws IOException { DatagramSocket socket = new DatagramSocket(); String message = "Hello, UDP!"; byte[] data = message.getBytes(); InetAddress address = InetAddress.getByName("127.0.0.1"); DatagramPacket packet = new DatagramPacket(data, data.length, address, 8888); socket.send(packet); socket.close(); } } ``` 接收端代码: ``` public class UDPReceiver { public static void main(String[] args) throws IOException { DatagramSocket socket = new DatagramSocket(8888); byte[] buffer = new byte[1024]; DatagramPacket packet = new DatagramPacket(buffer, buffer.length); socket.receive(packet); String message = new String(packet.getData(), 0, packet.getLength()); System.out.println("Received message: " + message); socket.close(); } } ``` 4. 运用TCP协议实现向服务器上传文件: TCP是一种可靠的面向连接的传输协议,它使用三次握手建立连接,保证数据的可靠传输。在Java中,使用Socket和ServerSocket类来实现TCP协议的数据传输。 客户端代码: ``` public class TCPClient { public static void main(String[] args) throws IOException { Socket socket = new Socket("127.0.0.1", 8888); OutputStream outputStream = socket.getOutputStream(); FileInputStream fileInputStream = new FileInputStream("test.txt"); byte[] buffer = new byte[1024]; int len = 0; while ((len = fileInputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, len); } fileInputStream.close(); socket.shutdownOutput(); InputStream inputStream = socket.getInputStream(); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); while ((len = inputStream.read(buffer)) != -1) { byteArrayOutputStream.write(buffer, 0, len); } String result = new String(byteArrayOutputStream.toByteArray()); System.out.println(result); byteArrayOutputStream.close(); inputStream.close(); outputStream.close(); socket.close(); } } ``` 服务端代码: ``` public class TCPServer { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(8888); Socket socket = serverSocket.accept(); InputStream inputStream = socket.getInputStream(); FileOutputStream fileOutputStream = new FileOutputStream("test_copy.txt"); byte[] buffer = new byte[1024]; int len = 0; while ((len = inputStream.read(buffer)) != -1) { fileOutputStream.write(buffer, 0, len); } fileOutputStream.close(); OutputStream outputStream = socket.getOutputStream(); outputStream.write("Upload success".getBytes()); outputStream.close(); inputStream.close(); socket.close(); serverSocket.close(); } } ```

相关推荐

最新推荐

recommend-type

Java向Runnable线程传递参数方法实例解析

主要介绍了Java向Runnable线程传递参数方法实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
recommend-type

Java中继承thread类与实现Runnable接口的比较

主要介绍了Java中继承thread类与实现Runnable接口的比较的相关资料,需要的朋友可以参考下
recommend-type

Java中的Runnable,Callable,Future,FutureTask的比较

主要介绍了Java中的Runnable,Callable,Future,FutureTask的比较的相关资料,需要的朋友可以参考下
recommend-type

基于Python的蓝桥杯竞赛平台的设计与实现

【作品名称】:基于Python的蓝桥杯竞赛平台的设计与实现 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:基于Python的蓝桥杯竞赛平台的设计与实现
recommend-type

python实现基于深度学习TensorFlow框架的花朵识别项目源码.zip

python实现基于深度学习TensorFlow框架的花朵识别项目源码.zip
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

2. 通过python绘制y=e-xsin(2πx)图像

可以使用matplotlib库来绘制这个函数的图像。以下是一段示例代码: ```python import numpy as np import matplotlib.pyplot as plt def func(x): return np.exp(-x) * np.sin(2 * np.pi * x) x = np.linspace(0, 5, 500) y = func(x) plt.plot(x, y) plt.xlabel('x') plt.ylabel('y') plt.title('y = e^{-x} sin(2πx)') plt.show() ``` 运行这段
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。