编程练习(14)

来源:互联网 发布:json测试数据 编辑:程序博客网 时间:2024/05/22 11:47

[1].在控制台中实现倒计时效果。

package test1;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.TimerTask;public class MyTimer extends TimerTask{    @Override    public void run() {        try {            Date now1=new Date();            SimpleDateFormat p=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");            String str1=p.format(now1);            System.out.println("开始时间:"+str1);            Process process= Runtime.getRuntime().exec( "F:\\liebao\\liebao.exe");            Thread.sleep(10000);//间隔10s            Date now2=new Date();            String str2=p.format(now2);            process.destroy();//结束程序            System.out.println("结束时间:"+str2);        } catch (Exception e) {            e.printStackTrace();        }    } }
package test1;/** * 使用java.util.Timer实现计时器 */import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Scanner;import java.util.Timer;/** * 创建一个计时器,定在"2017-11-30 11:26:40",打开浏览器程序 * @author Administrator * */public class TestTimer {    public static void main(String[] args) {        Timer t=new Timer();                t.schedule(new MyTimer(),10);    }}

运行结果(随机):
开始时间:2017-12-03 11:13:14
结束时间:2017-12-03 11:13:24

[2].写一段程序模仿售票窗口的售票情景(保证每个窗口售票不会出现重复)

package test2;public class Sale extends Thread {    private static int count=10;//假设有10张票    public  void run(){                     while(count>2)                      synchronized(this){                     System.out.println(Thread.currentThread().getName()+(count--));                 //当一个线程访问count对象的时候,其他试图访问count对象的线程将会阻塞,直到该线程访问count对象结束        }    }}
package test2;import java.util.Scanner;public class BeginSale {    public static void main(String[] args) {        Sale t=new Sale();        new Thread(t,"A").start();        new Thread(t,"B").start();        new Thread(t,"C").start();    }}

运行结果(随机):
A10
A9
A8
A7
A6
A5
A4
A3
C2
B1

[3].写一段程序模仿存款取款功能,注意不可以出现边存款边取款的现象

package test;import java.util.Scanner;public class Work {    public static double account=10000;//假设账户目前有10000    public synchronized void Cun(){    /*  try {            Thread.sleep(3000);        } catch (InterruptedException e) {            e.printStackTrace();        }*/        System.out.println("请输入你要存的钱:");        double x=new Scanner(System.in).nextDouble();        this.account=account+x;        System.out.println("目前您的账户余额为:"+account);    }    public synchronized void Qu(){        System.out.println("请输入你要取的钱:");        double y=new Scanner(System.in).nextDouble();        if(account>=y){            this.account=account-y;            System.out.println("目前您的账户余额为"+account);        }        else            System.out.println("余额不足");    }}
package test;import java.util.Scanner;public class Mytest {    public static void main(String[] args) {        final Work p=new Work();//此处final最好加上        Thread t1=new Thread(){            public void run(){                  p.Cun();            }        };        Thread t2=new Thread(){            public void run(){                  p.Qu();            }        };        t2.start();        t1.start();    }}

运行结果(随机):
请输入你要取的钱:
2000
您的账户余额为8000.0
请输入你要存的钱:
100
您的账户余额为:8100.0

[4].写一段程序实现生产者-消费者功能,生产一个消费一个

package test1;public class Work {    public static int va=0;    public static void main(String[] args) {        final Object lock=new Object();        Thread t1=new Thread(){            public  void run(){                for(int i=0;i<10;i++){                      synchronized (lock){                        try {//生产                            if(va<=0){                                  va++;                                System.out.println(va);                                lock.notifyAll();//唤醒等待池中的消费者                                lock.wait();//生产完后进入等待,让出资源                            }                        } catch (Exception e) {                            e.printStackTrace();                        }                    }                }            }        };        Thread t2=new Thread(){            public   void run(){                for(int i=0;i<10;i++){                    synchronized (lock) {                        try {//消费                            if(va>0){                                va--;                                System.out.println(va);                                lock.notify();//消费完后,唤醒等待池中的生产者                                lock.wait();//进入等待让出资源                            }else{                                System.out.println("产品不足,请生产!");                                lock.notify();//产品不足通知生产者生产                                lock.wait();//让出资源,进入等待                            }                        } catch (Exception e) {                             e.printStackTrace();                        }                    }                }            }        };        t1.start();        t2.start();    }}
原创粉丝点击