多线程服务器java(多线程服务器cpu)

华为云服务器特价优惠火热进行中!

2核2G2兆仅需 38 元;4核4G3兆仅需 79 元。购买时间越长越优惠!更多配置及优惠价格请咨询客服。

合作流程:
1、点击链接注册/关联华为云账号:点击跳转
2、添加客服微信号:cloud7591,确定产品方案、价格方案、服务支持方案等;
3、客服协助购买,并拉微信技术服务群,享受一对一免费技术支持服务;
技术专家在金蝶、华为、腾讯原厂有多年工作经验,并已从事云计算服务8年,可对域名、备案、网站搭建、系统部署、AI人工智能、云资源规划等上云常见问题提供更专业靠谱的服务,对相应产品提供更优惠的报价和方案,欢迎咨询。

本篇文章给大家谈谈多线程服务器java,以及多线程服务器cpu对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

微信号:cloud7591
如需了解更多,欢迎添加客服微信咨询。
复制微信号

本文目录一览:

用java多线程实现服务器与客户端之间的文件传输的代码!!!急!!!!

程序分Server和Client

服务器端打开侦听的端口,一有客户端连接就创建两个新的线程来负责这个连接

一个负责客户端发送的信息(ClientMsgCollectThread 类),

另一个负责通过该Socket发送数据(ServerMsgSendThread )

Server.java代码如下:

/*

* 创建日期 2009-3-7

*

* TODO 要更改此生成的文件的模板,请转至

* 窗口 - 首选项 - Java - 代码样式 - 代码模板

*/

package faue.MutiUser;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;

/**

* 服务器端

*

* @author Faue

*/

public class Server extends ServerSocket {

private static final int SERVER_PORT = 10000;

/**

* 构造方法,用于实现连接的监听

*

* @throws IOException

*/

public Server() throws IOException {

super(SERVER_PORT);

try {

while (true) {

Socket socket = super.accept();

new Thread(new ClientMsgCollectThread(socket), "getAndShow"

+ socket.getPort()).start();

new Thread(new ServerMsgSendThread(socket), "send"

+ socket.getPort()).start();

}

} catch (IOException e) {

e.printStackTrace();

}

}

public static void main(String[] args) throws IOException {

new Server();

}

/**

* 该类用于创建接收客户端发来的信息并显示的线程

*

* @author Faue

* @version 1.0.0

*/

class ClientMsgCollectThread implements Runnable {

private Socket client;

private BufferedReader in;

private StringBuffer inputStringBuffer = new StringBuffer("Hello");

/**

* 得到Socket的输入流

*

* @param s

* @throws IOException

*/

public ClientMsgCollectThread(Socket s) throws IOException {

client = s;

in = new BufferedReader(new InputStreamReader(client

.getInputStream(), "GBK"));

}

public void run() {

try {

while (!client.isClosed()) {

inputStringBuffer.delete(0, inputStringBuffer.length());

inputStringBuffer.append(in.readLine());

System.out.println(getMsg(inputStringBuffer.toString()));

}

} catch (IOException e) {

//e.printStackTrace();

System.out.println(client.toString() + " is closed!");

}

}

/**

* 构造显示的字符串

*

* @param line

* @return

*/

private String getMsg(String line) {

return client.toString() + " says:" + line;

}

}

/**

* 该类用于创建发送数据的线程

*

* @author Faue

* @version 1.0.0

*/

class ServerMsgSendThread implements Runnable {

private Socket client;

private PrintWriter out;

private BufferedReader keyboardInput;

private StringBuffer outputStringBuffer = new StringBuffer("Hello");

/**

* 得到键盘的输入流

*

* @param s

* @throws IOException

*/

public ServerMsgSendThread(Socket s) throws IOException {

client = s;

out = new PrintWriter(client.getOutputStream(), true);

keyboardInput = new BufferedReader(new InputStreamReader(System.in));

}

public void run() {

try {

while (!client.isClosed()) {

outputStringBuffer.delete(0, outputStringBuffer.length());

outputStringBuffer.append(keyboardInput.readLine());

out.println(outputStringBuffer.toString());

}

} catch (IOException e) {

//e.printStackTrace();

System.out.println(client.toString() + " is closed!");

}

}

}

}

客户端:

实现基于IP地址的连接,连接后也创建两个线程来实现信息的发送和接收

/*

* 创建日期 2009-3-7

*

*/

package faue.MutiUser;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.Socket;

/**

* 客户端

*

* @author Faue

*/

public class Client {

private Socket mySocket;

/**

* 创建线程的构造方法

*

* @param IP

* @throws IOException

*/

public Client(String IP) throws IOException {

try {

mySocket = new Socket(IP, 10000);

new Thread(new ServerMsgCollectThread(mySocket), "getAndShow"

+ mySocket.getPort()).start();

new Thread(new ClientMsgSendThread(mySocket), "send"

+ mySocket.getPort()).start();

} catch (IOException e) {

//e.printStackTrace();

System.out.println("Server.IP:" + IP

+ " port:10000 can not be Connected");

}

}

public static void main(String[] args) throws IOException {

try {

new Client(args[0]);

} catch (Exception e) {

System.out.println("输入的IP地址错误");

}

}

/**

* 该类用于创建接收服务端发来的信息并显示的线程

*

* @author Faue

* @version 1.0.0

*/

class ServerMsgCollectThread implements Runnable {

private Socket client;

private BufferedReader in;

private StringBuffer inputStringBuffer = new StringBuffer("Hello");

/**

* 得到Socket的输入流

*

* @param s

* @throws IOException

*/

public ServerMsgCollectThread(Socket s) throws IOException {

client = s;

in = new BufferedReader(new InputStreamReader(client

.getInputStream(), "GBK"));

}

public void run() {

try {

while (!client.isClosed()) {

inputStringBuffer.delete(0, inputStringBuffer.length());

inputStringBuffer.append(in.readLine());

System.out.println(getMsg(inputStringBuffer.toString()));

}

} catch (IOException e) {

//e.printStackTrace();

System.out.println(client.toString() + " is closed!");

System.exit(0);

}

}

/**

* 构造输入字符串

*

* @param line

* @return

*/

private String getMsg(String line) {

return client.toString() + " says:" + line;

}

}

/**

* 该类用于创建发送数据的线程

*

* @author Faue

* @version 1.0.0

*/

class ClientMsgSendThread implements Runnable {

private Socket client;

private PrintWriter out;

private BufferedReader keyboardInput;

private StringBuffer outputStringBuffer = new StringBuffer("Hello");

/**

* 得到键盘的输入流

*

* @param s

* @throws IOException

*/

public ClientMsgSendThread(Socket s) throws IOException {

client = s;

out = new PrintWriter(client.getOutputStream(), true);

keyboardInput = new BufferedReader(new InputStreamReader(System.in));

}

public void run() {

try {

while (!client.isClosed()) {

outputStringBuffer.delete(0, outputStringBuffer.length());

outputStringBuffer.append(keyboardInput.readLine());

out.println(outputStringBuffer.toString());

}

out.println("--- See you, bye! ---");

} catch (IOException e) {

//e.printStackTrace();

System.out.println(client.toString() + " is closed!");

System.exit(0);

}

}

}

}

如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!

vaela

Java多线程服务器的同步问题

多线程之所以会出现同步问题,是因为多个线程可以共享资源,对同一资源进行操作,导致不一致的问题,你这个并没有对什么资源进行操作,不会有问题

java里多线程的客户端与服务器怎么实现

服务器监听端口 做个无限循环 接到一个连接就创建一个通道线程,并将通道线程存储到一个list集合中 import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import

Java 实现多线程的几种方式汇总

有三种:

(1)继承Thread类,重写run函数

创建:

class xx extends Thread{

public void run(){

Thread.sleep(1000) //线程休眠1000毫秒,sleep使线程进入Block状态,并释放资源

}}

开启线程:

对象.start() //启动线程,run函数运行

(2)实现Runnable接口,重写run函数

开启线程:

Thread t = new Thread(对象) //创建线程对象

t.start()

(3)实现Callable接口,重写call函数

Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它线程执行的任务。

Callable和Runnable有几点不同:

①Callable规定的方法是call(),而Runnable规定的方法是run().

②Callable的任务执行后可返回值,而Runnable的任务是不能返回值的

③call()方法可抛出异常,而run()方法是不能抛出异常的。

④运行Callable任务可拿到一个Future对象,Future表示异步计算的结果。它提供了检查计算是否完成的方法,以等

待计算的完成,并检索计算的结果.通过Future对象可了解任务执行情况,可取消任务的执行,还可获取任务执行的结果

Java多线程问题总结?

Java多线程分类中写了21篇多线程的文章,21篇文章的内容很多,个人认为,学习,内容越多、越杂的知识,越需要进行深刻的总结,这样才能记忆深刻,将知识变成自己的。java课程培训机构认为这篇文章主要是对多线程的问题进行总结的,因此罗列了多个多线程的问题。

这些多线程的问题,有些来源于各大网站、有些来源于自己的思考。

(1)发挥多核CPU的优势

随着工业的进步,现在的笔记本、台式机乃至商用的应用服务器至少也都是双核的,4核、8核甚至16核的也都不少见,如果是单线程的程序,那么在双核CPU上就浪费了50%,在4核CPU上就浪费了75%。单核CPU上所谓的”多线程”那是假的多线程,同一时间处理器只会处理一段逻辑,只不过线程之间切换得比较快,看着像多个线程”同时”运行罢了。多核CPU上的多线程才是真正的多线程,它能让你的多段逻辑同时工作,多线程,可以真正发挥出多核CPU的优势来,达到充分利用CPU的目的。

(2)防止阻塞

从程序运行效率的角度来看,单核CPU不但不会发挥出多线程的优势,反而会因为在单核CPU上运行多线程导致线程上下文的切换,而降低程序整体的效率。但是单核CPU我们还是要应用多线程,就是为了防止阻塞。试想,如果单核CPU使用单线程,那么只要这个线程阻塞了,比方说远程读取某个数据吧,对端迟迟未返回又没有设置超时时间,那么你的整个程序在数据返回回来之前就停止运行了。多线程可以防止这个问题,多条线程同时运行,哪怕一条线程的代码执行读取数据阻塞,也不会影响其它任务的执行。

(3)便于建模

这是另外一个没有这么明显的优点了。假设有一个大的任务A,单线程编程,那么就要考虑很多,建立整个程序模型比较麻烦。但是如果把这个大的任务A分解成几个小任务,任务B、任务C、任务D,分别建立程序模型,并通过多线程分别运行这几个任务,那就简单很多了。

用java多线程实现服务器与客户端原理

服务器端:

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import java.io.*;

import java.net.*;

import java.util.Vector;

public class OneToMoreServer extends JFrame implements ActionListener{

JPanel contentPane;

JLabel jLabel2 = new JLabel();

JTextField jTextField2 = new JTextField("4700");

JButton jButton1 = new JButton();

JLabel jLabel3 = new JLabel();

JTextField jTextField3 = new JTextField();

JButton jButton2 = new JButton();

JScrollPane jScrollPane1 = new JScrollPane();

JTextArea jTextArea1 = new JTextArea();

ServerSocket server = null;

Socket socket = null;BufferedReader instr =null;PrintWriter os=null ;

Vector vector=new Vector();

boolean serverRun=true;

boolean clientRun=true;

//Construct the frame

public OneToMoreServer() {

jbInit();

}

class MyThread extends Thread{//该线程负责接收数据

Socket socketI=null;

BufferedReader br=null;

public MyThread(Socket socket)

{

socketI=socket;

}

public void run(){

try{

while(clientRun){

this.sleep(100);

br= new BufferedReader(new InputStreamReader(socketI.getInputStream()));

if(br.ready()){ //检查是否有数据

jTextArea1.append("接收到来自客户端("+socketI.getInetAddress().toString()+")的消息: "+br.readLine()+"\n");

}

}

}catch(Exception ex){JOptionPane.showMessageDialog(null,ex.toString());}

}

}

public void actionPerformed(ActionEvent e){

if(e.getSource()==jButton1){

int port=Integer.parseInt(jTextField2.getText().trim());

//监听指定端口

try

{

server = new ServerSocket(port);

new Thread(new ListenClient()).start();

}

catch(IOException ex)

{

JOptionPane.showMessageDialog(null,ex.toString());

}

}

if(e.getSource()==jButton2){

String msg=jTextField3.getText().trim();

if(msg.length()!=0)

sendData("hello");

}

}

//该线程负责监听指定端口

class ListenClient implements Runnable

{

public void run()

{

try{

if(jButton1.getText().trim().equals("侦听")){

jButton1.setText("正在侦听...");

while(serverRun)

{

Socket socketI=server.accept();//有客户端连入时建立一个线程监听客户端发送的消息

vector.add(socketI);

jButton1.setText("正在聊天...");

jTextArea1.append("客户端"+socketI.getInetAddress().toString()+"已经连接到服务器\n");

MyThread t=new MyThread(socketI);

t.start();

}

}

}catch(Exception ex){

JOptionPane.showMessageDialog(null,ex.toString());

}

}

}

private void sendData(String s){//发送数据

try{

for(int i=0;ivector.size();i++)

{

//怎么广播?????

//向每个客户端发送一条消息

Socket socket=(Socket)vector.get(i);

os= new PrintWriter(socket.getOutputStream());

os.println(s);

os.flush();

}

}catch(Exception ex){

}

}

private void jbInit() {

contentPane = (JPanel) this.getContentPane();

contentPane.setLayout(null);

this.setSize(new Dimension(540, 340));

this.setTitle("服务器");

jLabel2.setBounds(new Rectangle(22, 27, 72, 28));

jLabel2.setText("端口号");

jLabel2.setFont(new java.awt.Font("宋体", 0, 14));

jTextField2.setBounds(new Rectangle(113, 27, 315, 24));

jButton1.setBounds(new Rectangle(440, 28, 73, 25));

jButton1.setFont(new java.awt.Font("Dialog", 0, 14));

jButton1.setBorder(BorderFactory.createEtchedBorder());

jButton1.setActionCommand("jButton1");

jButton1.setText("侦听");

jLabel3.setBounds(new Rectangle(23, 57, 87, 28));

jLabel3.setText("请输入信息");

jLabel3.setFont(new java.awt.Font("宋体", 0, 14));

jTextField3.setBounds(new Rectangle(114, 60, 314, 24));

jTextField3.setText("");

jButton2.setText("广播");

jButton2.setActionCommand("jButton1");

jButton2.setBorder(BorderFactory.createEtchedBorder());

jButton2.setFont(new java.awt.Font("Dialog", 0, 14));

jButton2.setBounds(new Rectangle(440, 58, 73, 25));

jScrollPane1.setBounds(new Rectangle(23, 92, 493, 189));

contentPane.add(jTextField2, null);

contentPane.add(jButton1, null);

contentPane.add(jLabel3, null);

contentPane.add(jTextField3, null);

contentPane.add(jButton2, null);

contentPane.add(jScrollPane1, null);

contentPane.add(jLabel2, null);

jScrollPane1.getViewport().add(jTextArea1, null);

jButton1.addActionListener(this);

jButton2.addActionListener(this);

this.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){

try{

socket.close();

instr.close();

System.exit(0);

}catch(Exception ex){

//JOptionPane.showMessageDialog(null,ex.toString());

}

}

});

}

public static void main(String arg[]){

JFrame.setDefaultLookAndFeelDecorated(true);

OneToMoreServer frm=new OneToMoreServer();

frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frm.setVisible(true);

}

}

客户端

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import java.io.*;

import java.net.*;

public class Client extends JFrame implements ActionListener{

JPanel contentPane;

JLabel jLabel1 = new JLabel();

JTextField jTextField1 = new JTextField("127.0.0.1");

JLabel jLabel2 = new JLabel();

JTextField jTextField2 = new JTextField("4700");

JButton jButton1 = new JButton();

JLabel jLabel3 = new JLabel();

JTextField jTextField3 = new JTextField();

JButton jButton2 = new JButton();

JScrollPane jScrollPane1 = new JScrollPane();

JTextArea jTextArea1 = new JTextArea();

BufferedReader instr =null;

Socket socket = null;

PrintWriter os=null;

public Client() {

jbInit();

}

class MyThread extends Thread{

public void run(){

try{

os=new PrintWriter(socket.getOutputStream());

instr=new BufferedReader(new InputStreamReader(socket.getInputStream()));

while(true)

{

this.sleep(100);

if(instr.ready())

{

jTextArea1.append("接收到来自服务器的消息: "+instr.readLine()+"\n");

}

}

}catch(Exception ex){

JOptionPane.showMessageDialog(null,ex.toString());

}

}

}

public void actionPerformed(ActionEvent e){

if(e.getSource()==jButton1){

String ip=jTextField3.getText().trim();

int port=Integer.parseInt(jTextField2.getText().trim());

connectServer(ip,port);

}

if(e.getSource()==jButton2){

String s=this.jTextField3.getText().trim();

sendData(s);

}

}

private void connectServer(String ip,int port){//连接

try{

if(jButton1.getText().trim().equals("连接")){

jButton1.setText("连接服务器...");

socket=new Socket(ip,port);

jButton1.setText("正在聊天");

MyThread t=new MyThread();

t.start();

}

}catch(Exception ex){

JOptionPane.showMessageDialog(this,ex.toString());

}

}

private void sendData(String s){//发送数据

try{

os = new PrintWriter(socket.getOutputStream());

os.println(s);

os.flush();

this.jTextArea1.append("向服务器发送消息:"+s+"\n");

}catch(Exception ex){

JOptionPane.showMessageDialog(this,ex.toString());

}

}

private void jbInit() {

contentPane = (JPanel) this.getContentPane();

jLabel1.setFont(new java.awt.Font("宋体", 0, 14));

jLabel1.setText("服务器名称");

jLabel1.setBounds(new Rectangle(20, 22, 87, 28));

contentPane.setLayout(null);

this.setSize(new Dimension(540, 340));

this.setTitle("客户端");

jTextField1.setBounds(new Rectangle(114, 26, 108, 24));

jLabel2.setBounds(new Rectangle(250, 25, 72, 28));

jLabel2.setText("端口号");

jLabel2.setFont(new java.awt.Font("宋体", 0, 14));

jTextField2.setBounds(new Rectangle(320, 27, 108, 24));

jButton1.setBounds(new Rectangle(440, 28, 73, 25));

jButton1.setFont(new java.awt.Font("Dialog", 0, 14));

jButton1.setBorder(BorderFactory.createEtchedBorder());

jButton1.setActionCommand("jButton1");

jButton1.setText("连接");

jLabel3.setBounds(new Rectangle(23, 57, 87, 28));

jLabel3.setText("请输入信息");

jLabel3.setFont(new java.awt.Font("宋体", 0, 14));

jTextField3.setBounds(new Rectangle(114, 60, 314, 24));

jButton2.setText("发送");

jButton2.setActionCommand("jButton1");

jButton2.setBorder(BorderFactory.createEtchedBorder());

jButton2.setFont(new java.awt.Font("Dialog", 0, 14));

jButton2.setBounds(new Rectangle(440, 58, 73, 25));

jScrollPane1.setBounds(new Rectangle(23, 92, 493, 189));

contentPane.add(jLabel1, null);

contentPane.add(jTextField1, null);

contentPane.add(jLabel2, null);

contentPane.add(jTextField2, null);

contentPane.add(jButton1, null);

contentPane.add(jLabel3, null);

contentPane.add(jTextField3, null);

contentPane.add(jButton2, null);

contentPane.add(jScrollPane1, null);

jScrollPane1.getViewport().add(jTextArea1, null);

jButton1.addActionListener(this);

jButton2.addActionListener(this);

this.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){

try{

socket.close();instr.close();os.close();System.exit(0);

}catch(Exception ex){

JOptionPane.showMessageDialog(null,ex.toString());

}

}

});

}

public static void main(String arg[]){

JFrame.setDefaultLookAndFeelDecorated(true);

Client frm=new Client();

frm.setVisible(true);

}

}

关于多线程服务器java和多线程服务器cpu的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

发布于 2023-04-12 14:04:32
收藏
分享
海报
29
目录

    忘记密码?

    图形验证码

    复制成功
    微信号: cloud7591
    如需了解更多,欢迎添加客服微信咨询。
    我知道了