Java多线程使用案例

创建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();
    }

猜你喜欢

转载自blog.csdn.net/xxxmou/article/details/129308877