## 定时器
定时器:用来设定任务出发时间规则,可以绑定多个定时任务;定时任务:具体要执行的任务,一个定时任务是一个子线程。
- 创建一个定时器:
Timer timer = new Timer();
- 在定时器绑定定时任务。延迟3秒后执行定时任务,定时任务使用TimerTask创建,该类是一个线程类,实现了Runnable 接口,只需要重写run方法。
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("3秒后定时任务执行");
}
},3000);
Calendar c = Calendar.getInstance();
c.set(2021,7,29,10,42);
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("2021年7月29日10点42分执行任务");
}
},c.getTime());
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("延迟3秒执行,每隔1执行一次");
}
},3000,1000);
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("2021年7月29日10点48分执行任务,每间隔1秒执行一次");
}
},c.getTime(),1000);
Socket 的使用:
Client端口
package com.ljl0729;
import java.io.*;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
/**
* 客户端Socket
*/
public class Client {
public static void main(String[] args) {
//创建一个Socket对象,用来跟服务端的Socket进行通信,传递数据
//指定要连接的Socket端的服务器IP地址和端口号,
// 本机ip是127.0.0.1或者写本机的域名localhost
//如果连接成功,返回本机的一个Socket对象
try(Socket s = new Socket("127.0.0.1",8000);
//打开输入流用来接收从服务端发送来的数据
InputStream is = s.getInputStream();
//打开输出流,用来向服务端发送信息
OutputStream os = s.getOutputStream();
//封装输入流流
BufferedReader br = new BufferedReader(new InputStreamReader(is));
//封装输出流
PrintWriter pw = new PrintWriter(os);
){
//获取服务器发送过来的数据
String msg = br.readLine();
System.out.println("服务器:"+msg);
Scanner sc = new Scanner(System.in);
Thread s1 = new Thread(()->{
while (true){
//读取服务器发送过来的
try {
System.out.println(br.readLine());
} catch (IOException e) {
e.printStackTrace();
}
}
});
while(true){
// //读取服务器发送过来的
// System.out.println(br.readLine());
// //
String str = sc.next();
//向服务器端发送数据
pw.println(str);
//刷新缓冲区,把数据及时传输到对方
pw.flush();
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Server端口
package com.ljl0729;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
/**
* f服务端Socket
*/
public class Server {
public static void main(String[] args) {
try (//创建服务端ServerSocket对象,指定端口接收客户端请求
ServerSocket ss = new ServerSocket(8000);
//监听客户端发送的请求,该方法阻塞,如果没有客户端发来请求一直等待,
// 直到有客户端发来请求返回Socket对象
Socket s = ss.accept();
//打开输入流对象,读取客户端发过来的数据
InputStream is = s.getInputStream();
//打开输出流对象,向客户端发送数据
OutputStream os = s.getOutputStream();
//封装输入流
BufferedReader br = new BufferedReader(new InputStreamReader(is));
//封装输出流
PrintWriter pw = new PrintWriter(os);
){
System.out.println("客户端连接服务器成功!");
System.out.println("欢迎访问服务器");
//服务器端向客户端发送数据
pw.println("欢迎访问服务器34");
//刷新缓冲区,把数据及时传输到对方
pw.flush();
//获取键盘输入对象
Scanner sc = new Scanner(System.in);
Thread t1 = new Thread(()->{
while (true){
try {
System.out.println("客户端说:"+br.readLine());
} catch (IOException e) {
e.printStackTrace();
}
}
},"接收线程");
t1.start();
while (true){
//获取键盘输入内容
String str = sc.next();
//发送输入内容到客户端
pw.println(str);
pw.flush();
/*//接收客户端发送过来的数据
String msg = br.readLine();
System.out.println("客户端"+msg);*/
}
} catch (IOException e) {
e.printStackTrace();
}
}
}