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