编程练习(14)

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

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值