创建2个线程实现网络聊天
发送数据
public class SenderA1 implements Runnable {
//发
private Socket s;
private String name;
public SenderA1(Socket s, String name) {
this.s = s;
this.name = name;
}
public SenderA1() {
}
@Override
public void run() {
PrintWriter out = null;
try {
out = new PrintWriter(s.getOutputStream());
while (true) {
String sss = (new Scanner(System.in).nextLine());
out.write(this.name + ":" + sss + "\r\n");
out.flush();
}
} catch (Exception e) {
System.out.println("对方下线,聊天结束");
}
}
}
读取数据
public class ReaderA1 implements Runnable {
private Socket s;
public ReaderA1(Socket s) {
this.s = s;
}
public ReaderA1() {
}
@Override
public void run() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
while (true) {
System.out.println(br.readLine());
}
} catch (Exception e) {
System.out.println("对方下线,聊天结束");
}
}
}
聊天的服务端
public class Servet {
public static void main(String[] args) throws IOException {
//服务端
int port = 6688;
String server_ip1 = "";
System.out.printf("服务器监听中[ip = %s,port = %d]%n%n", server_ip1, port);
var server = new ServerSocket(port);
//中断,监听网络有没有访问
var s = server.accept();
System.out.println("有人连线");
new Thread(new SenderA1(s, "服务器")).start();
new Thread(new ReaderA1(s)).start();
}
}
聊天的客户端
public class Client {
public static void main(String[] args) throws IOException {
//客户端
int port = 6688;
String server_ip1 = "";
var s = new Socket(server_ip1, port);
new Thread(new SenderA1(s, "李四")).start();
new Thread(new ReaderA1(s)).start();
}
}
使用多线程模拟售票
工具类
public class TicketHelp implements Runnable {
private int num = 100;
public TicketHelp() {
}
public TicketHelp(int num) {
this.num = num;
}
@Override
public void run() {
String tn = Thread.currentThread().getName();
System.out.printf("线程-%s-启动%n", tn);
while (true) {
try {
Thread.sleep(10);
} catch (Exception e) {
e.printStackTrace();
}
synchronized (this) {
if (num < 1) {
break;
}
System.out.printf("%s;售出一张票[%d]座,剩余%d张票%n", tn, num, --num);
try {
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
}
}
}
System.out.println("线程结束");
}
}
一共创建了四个线程在卖票
public static void main(String[] args) {
TicketHelp th = new TicketHelp(50);
ExecutorService es1 = new ThreadPoolExecutor(5, 5, 0L,
TimeUnit.SECONDS, new ArrayBlockingQueue<>(10));
es1.submit(() -> {
var t1 = new Thread(th, "东风路");
var t2 = new Thread(th, "西风路");
var t3 = new Thread(th, "南风路");
var t4 = new Thread(th, "北风路");
t1.start();
t2.start();
t3.start();
t4.start();
});
}
方法2
public static void main(String[] args) {
TicketHelp th = new TicketHelp(50);
var t1 = new Thread(th, "东风路");
var t2 = new Thread(th, "西风路");
var t3 = new Thread(th, "南风路");
var t4 = new Thread(th, "北风路");
t1.start();
t2.start();
t3.start();
t4.start();
}
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY, 21);
c.set(Calendar.MINUTE, 39);
new Thread(() -> {
try {
Thread.sleep(c.getTimeInMillis() - System.currentTimeMillis());
System.out.println("hello");
//Runtime.getRuntime().exec("cmd /k shutdown /s /t 30");
//Runtime.getRuntime().exec("cmd /k start http://www.baidu.com");
} catch (Exception e) {
e.printStackTrace();
}
}).start();
}