Java多线程和网络编程入门学习

多线程

Java中多线程的实现有两种方式,一种是继承extends Thread类,另一种是实现Runnable接口

而Thread类实现了Runnable接口,他们之间存在多态性,在Java中只有单继承,而允许实现多个接口。所以常用作的创建线程的方法是实现Runnable接口。

下面是两种方法的实现举例:

继承Thread类创建线程

public class ThreadTest {
    public static void main(String[] args) {
        MyThread thread = new MyThread() ;
        thread.start() ;
        int count = 5 ;
        while(count != 0) {
            count -- ;
            System.out.println("主线程在跑");
        }
}
//继承thread类实现多线程方法
class MyThread extends Thread {
    public void run() {
        int count  = 10 ;
        while(count != 0) {
            count-- ;
            System.out.println("线程正在执行");
        }
    }
}

实现Runnable接口创建线程

public class ThreadTest {
    public static void main(String[] args) {
        MyThread thread = new MyThread() ;
        Thread t = new Thread(thread) ;
        t.start() ;
        int count = 5 ;
        while(count != 0) {
            count -- ;
            System.out.println("主线程在跑");
        }
}

//实现runnable接口
class MyThread implements Runnable {
    @Override
    public void run() {
    	int count = 10 ;
        while(count != 0) {
				count -- ;
	            System.out.println("线程在跑");
        }
    }
}

比较:
实现Runnable接口比继承Thread类所具有的优势:
1):适合多个相同的程序代码的线程去处理同一个资源
2):可以避免java中的单继承的限制
3):增加程序的健壮性,代码可以被多个线程共享,代码和数据独立

基于TCP的Java网络编程
直接说代码

TCPServer作为服务端

package ChatServer;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

//tcp通信的服务器端,接受客户端请求,读取客户端发送的数据
//表示服务器的类ServerSocket
//成员方法:socket accept
//服务器的实现步骤:
//创建服务器ServerSocket对象中的方法accept
public class TCPServer {
    public static void main(String[] args) throws IOException {
        //创建服务器对象serverSocket对象和系统要指定的端口号
        ServerSocket server = new ServerSocket(8888) ;
        //使用serverSocket对象的方法accept,获取到请求的客户端对象socket
        Socket socket = server.accept() ;
        //使用网络字节输入流InputStream对象中的方法read,读取客户端发送的数据
        InputStream  is = socket.getInputStream() ;
        byte[] bytes = new byte[1024] ;
        int len = is.read(bytes) ;
        //打印接收到的客户端的数据
        System.out.println(new String(bytes, 0, len));
        //使用socket对象中的方法getOutputStream获取网络字节输出流
        OutputStream os = socket.getOutputStream() ;
        //使用网络字节输出流outputStream对象中的方法write给客户端回写数据
        os.write("收到数据".getBytes()) ;
        socket.close() ;
        server.close() ;
    }
}

TCPClient作为客户端

package ChatClient;
//java网络编程

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class TCPClient {
    public static void main(String[] args) throws IOException {
        //创建一个客户端对象socket,构造方法绑定服务器的IP地址和端口号
        Socket socket = null;
        try {
            //使用网络字节输出流outputstream获取网络字节输出流outputstream对象
            socket = new Socket("127.0.0.1", 8888);

        } catch (IOException e) {
            e.printStackTrace();
        }
        OutputStream os = null;
        try {
        	//获取socket的输出流句柄
            os = socket.getOutputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
        	//向服务端发送数据
            os.write("你好服务器".getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
        //接收网络数据的socket句柄
        InputStream is = socket.getInputStream() ;
        //定义好缓冲区
        byte[] bytes = new byte[1024] ;
		//接受服务端的数据
        int len = is.read(bytes) ;
        System.out.println("接收到服务器回应:"+new String(bytes, 0, len));
		os..close() ;
		is.close() ;
        socket.close() ;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值