设计网站公司哪里好厦门 网站建设公司
1.多线程
1.1 程序、进程、线程
程序:是为了完成特定任务、用某种语言编写的一组指定的集合,是一段静态的代码。(程序是静态的)
进程:是程序的一次执行过程。正在运行的一个程序,进程作为资源分配的单位,在内存中会为每个进程分配不同的内存区域。
线程:进程可进一步细化为线程,是一个进程内部的一条执行路径。若一个进程同一时间并行执行多个线程,就是支持多线程的。
进程是操作系统进行资源分配的基本单位。线程是操作系统调度执行的基本单位。
1.2 创建线程
创建线程有三种方式:
(1)方式1:继承Thread类
(2)方式2:实现Runnable接口
(3)方式3:实现Callable接口
public class Test03 {public static void main(String[] args) {//1.main方法作为程序的入口,里面执行的逻辑/任务就是主线程的任务:for(int i = 0; i <= 10; i++){System.out.println("main----"+ i );}//6. 创建子线程对象,执行任务TestThread t = new TestThread();//7. 执行任务,不是直接调用run方法,而是要将线程启动:t.start();//8.一旦子线程启动,就会和主线程争抢资源//9.主线程中再加入一个循环:for(int i = 0; i <= 100; i++){System.out.println("main--main--"+ i );}}
}
/*** 2. 创建一个线程类:TestThread* 3.想要具备多线程的能力->必须继承Thread类*/public class TestThread extends Thread{//4. 线程对应的任务放在一个方法:@Overridepublic void run() {//5. 线程任务:输出10个数:for(int i = 0; i <= 10; i++){System.out.println("子线程----"+ i );}}
}
2. 网络编程
2.1 概念明晰
2.1.1 网络编程
把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大、功能强的网络系统,从而使众多的计算机可以方便地互相传递信息、共享硬件、软件、数据信息等资源。设备之间在网络中进行数据地传输,发送/接收数据。
2.1.2 IP地址
用来标志网络中的一个通信实体的地址。通信实体可以是计算机,路由器等。
2.1.3 端口号
IP地址用来标志一台计算机,但是一台计算机上可能提供多种应用程序,使用端口来区分这些应用程序。
2.2 网络通信协议
网络通信协议:计算机网络中实现通信必须有一些约定即通信协议,对速率、传输代码、代码结构、传输控制步骤、出错控制等制定标准。
由于结点间联系复杂,制定协议时,把复杂成分分解成一些简单的成分,再将它们复合起来。最常用的复合方式是层次方式,即同层间可以通信、上一层可以调用下一层,而与再下一层不发生关系。
2.3 Socket套接字
2.3.1 单向通信
客户端:
public class TestClient { //客户端public static void main(String[] args) throws IOException {System.out.println("客户端启动");//套接字:指定服务器的ip和端口号Socket s = new Socket("localhost", 10086);//对于程序员来说,感受利用输出流在传送数据:OutputStream os = s.getOutputStream();DataOutputStream dos = new DataOutputStream(os);//传送数据dos.writeUTF("hello服务器,我是客户端");//流:网络资源关闭dos.close();os.close();s.close();}
}
服务端:
public class TestServer {public static void main(String[] args) throws IOException {System.out.println("服务器启动");//套接字:ServerSocket ss = new ServerSocket(10086);//等待客户端发送数据:Socket s = ss.accept();//服务器端感受到的输入流:InputStream is = s.getInputStream();DataInputStream dis = new DataInputStream(is);//接收客户端发送的数据String str = dis.readUTF();System.out.println("服务器收到:"+str);//关闭流、网络资源:dis.close();is.close();s.close();ss.close();}
}
2.3.2 双向通信
客户端
public class TestClient { //客户端public static void main(String[] args) throws IOException {System.out.println("客户端启动");//套接字:指定服务器的ip和端口号Socket s = new Socket("localhost", 10086);//对于程序员来说,感受利用输出流在传送数据:OutputStream os = s.getOutputStream();DataOutputStream dos = new DataOutputStream(os);//传送数据dos.writeUTF("hello服务器,我是客户端");//对服务器返回的数据进行接收InputStream is = s.getInputStream();DataInputStream dis = new DataInputStream(is);String str = dis.readUTF();System.out.println("服务器对我说:"+str);//流:网络资源关闭dos.close();os.close();s.close();}
}
服务端:
public class TestServer {public static void main(String[] args) throws IOException {System.out.println("服务器启动");//套接字:ServerSocket ss = new ServerSocket(10086);//等待客户端发送数据:Socket s = ss.accept();//服务器端感受到的输入流:InputStream is = s.getInputStream();DataInputStream dis = new DataInputStream(is);//接收客户端发送的数据String str = dis.readUTF();System.out.println("服务器收到:"+str);//向客户端发送数据:OutputStream os = s.getOutputStream();DataOutputStream dos = new DataOutputStream(os);dos.writeUTF("hello客户端,我接收到你的信息了。");//关闭流、网络资源:dos.close();os.close();dis.close();is.close();s.close();ss.close();}
}