多线程作业

来源:互联网 发布:程序员证书考试时间 编辑:程序博客网 时间:2024/05/24 07:35

1. 编写多线程程序,模拟多个人通过一个山洞的模拟。这个山洞每次只能通过一个人,每个人通过山洞的时间为5秒,有10个人同时准备过此山洞,显示每次通过山洞人的姓名和顺序。

public class MoNi implements Runnable{int i = 5;@Overridepublic synchronized void run() {String name = Thread.currentThread().getName();System.out.println(name+"第"+(6-i)+"个通过山洞");i--;try {Thread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();}}public static void main(String[] args) {MoNi mn = new MoNi();Thread t1 = new Thread(mn,"张三");t1.start();Thread t2 = new Thread(mn,"李四");t2.start();Thread t3 = new Thread(mn,"王五");t3.start();Thread t4 = new Thread(mn,"赵六");t4.start();Thread t5 = new Thread(mn,"小七");t5.start();}}

1. 设计一个多线程的程序如下:设计一个火车售票模拟程序。假如火车站要有100张火车票要卖出,现在有5个售票点同时售票,用5个线程模拟这5个售票点的售票情况。


public class TicketDemo implements Runnable {int piao = 100;public synchronized void cs() {String name = Thread.currentThread().getName();if (piao > 0) {piao--;System.out.println(name + "卖出第"+(100-piao)+"张票,剩余" + piao + "张票");}else{System.out.println("已经卖完了");}}@Overridepublic void run() {for (int i = 0; i <= 20; i++) {try {Thread.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}cs();}}public static void main(String[] args) {TicketDemo t = new TicketDemo();Thread t1 = new Thread(t,"1号窗口");t1.start();Thread t2 = new Thread(t,"2号窗口");t2.start();Thread t3 = new Thread(t,"3号窗口");t3.start();Thread t4 = new Thread(t,"4号窗口");t4.start();Thread t5 = new Thread(t,"5号窗口");t5.start();}}

1. 编写两个线程,一个线程打印1-52的整数,另一个线程打印字母A-Z。打印顺序为12A34B56C.5152Z。即按照整数和字母的顺序从小到大打印,并且每打印两个整数后,打印一个字母,交替循环打印,直到打印到整数52和字母Z结束。

public class Printer{int index = 1;public synchronized void print(int i) throws Exception{if(index%3==0){this.wait();}this.notify();System.out.println(i);index++;}public synchronized void print(char c) throws Exception{if(index%3!=0){this.wait();}this.notify();System.out.println(c);index++;}}public class NumberPrinter extends Thread{private Printer p;public NumberPrinter(Printer p) {this.p = p;}@Overridepublic void run() {for(int i = 1;i<=52;i++){try {p.print(i);} catch (Exception e) {e.printStackTrace();}}}}public class LetterPrinter extends Thread{private Printer p;public LetterPrinter(Printer p) {this.p = p;}@Overridepublic void run() {for(char c = 'A';c<='Z';c++){try {p.print(c);} catch (Exception e) {e.printStackTrace();}}}}public class Test {public static void main(String[] args) {Printer p = new Printer();NumberPrinter np = new NumberPrinter(p);LetterPrinter lp = new LetterPrinter(p);Thread t1 = new Thread(np);t1.start();Thread t2 = new Thread(lp);t2.start();}}