计时器线程Timer
当某些操作需要周期性地执行时可以使用计时器,用户可以使用Timer类
使用Timer类的构造方法Timer(int a,Object b)
,其中a参数是指毫秒,b是指实现了ActionListener接口的类
当Timer类对象每隔a毫秒后自动"震铃"一次,并回调b对象中actionPerformed(ActionEvent e)
方法,要想计时器只震铃一次可以让计时器调用setRepeats(boolean b)
方法,参数b设置为false
即可
另外计时器还可以调用setInitialDelay(int delay)
设置首次"震铃"的延时,如果没有调用此方法设置的话,默认的首次"震铃"就为参数a毫秒
还有一点要注意的是Timer类线程只能在GUI中使用
计时器线程的例子
package Chapter_15.Part_6;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.time.LocalTime;
public class myWindow extends JFrame implements ActionListener {
Timer timer;
JButton jButtonStar;
JButton jButtonStop;
JButton jButtonContinue;
JTextField jTextField;
String time;
myWindow() {
setTitle("操控时间");
setBounds(400, 400, 400, 400);
setLayout(new FlowLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
timer = new Timer(1000, this);
jButtonStar = new JButton("开始");
jButtonStar.addActionListener(this);
add(jButtonStar);
jButtonStop = new JButton("暂停");
jButtonStop.addActionListener(this);
add(jButtonStop);
jButtonContinue = new JButton("继续");
jButtonContinue.addActionListener(this);
add(jButtonContinue);
jTextField = new JTextField(10);
add(new JLabel("当前时间"));
add(jTextField);
validate();
}
@Override
public void actionPerformed(ActionEvent actionEvent) {
if (actionEvent.getSource() == timer) {
LocalTime localTime = LocalTime.now();
time = localTime.getHour() + ":" + localTime.getMinute() + ":" + localTime.getSecond();
jTextField.setText(time);
} else if (actionEvent.getSource() == jButtonStar) {
timer.start();
} else if (actionEvent.getSource() == jButtonStop) {
timer.stop();
} else if (actionEvent.getSource() == jButtonContinue) {
timer.restart();
}
}
}
package Chapter_15.Part_6;
public class Example15_12 {
public static void main(String[] args) {
myWindow myWindow = new myWindow();
}
}
线程的联合
一个线程A在占用CPU资源的期间可以让其他线程B调用join()
方法和本线程联合
B.join()
这种情况就称为线程A联合线程B,当线程B执行完run()方法后线程A就会重新排队等待CPU资源,以便恢复执行.但是联合线程B的前提是线程B事先已经调用start()
方法,假如线程B不是活的那么,联合就没有任何效果
假如你去店里买蛋糕,店里马上给你做一个,这时候你在等蛋糕做好,当蛋糕做好你就可以带着蛋糕走人了
线程联合的例子
package Chapter_15.Part_7;
public class Consumer implements Runnable {
Thread boy;
Thread vender;
Car car;
Consumer() {
boy = new Thread(this);
vender = new Thread(this);
vender.setName("汽车制造厂");
}
class Car {
String name;
float price;
Car(String name, float price) {
this.name = name;
this.price = price;
}
}
@Override
public void run() {
if (Thread.currentThread() == boy) {
System.out.println("等汽车制造厂生产汽车");
vender.start();
try {
vender.join();
} catch (InterruptedException e) {
}
System.out.println("恭喜你成功购买一辆" + car.name + ",价格:" + car.price);
} else if (Thread.currentThread() == vender) {
try {
Thread.sleep(1000);
System.out.println(vender.getName() + "正在生产你想要的汽车,请稍等...");
Thread.sleep(3000);
System.out.println("汽车生产完毕!");
car = new Car("特斯拉Model3", 271550);
} catch (InterruptedException e) {
}
}
}
}
package Chapter_15.Part_7;
public class Example15_13 {
public static void main(String[] args) {
Consumer consumer = new Consumer();
consumer.boy.start();
}
}
运行结果
C:\Users\Administrator\.IntelliJIdea2019.3\config\jdbc-drivers\Apache Derby\10.14.1.0\derby-10.14.1.0.jar" Chapter_15.Part_7.Example15_13
等汽车制造厂生产汽车
汽车制造厂正在生产你想要的汽车,请稍等...
汽车生产完毕!
恭喜你成功购买一辆特斯拉Model3,价格:271550.0
进程已结束,退出代码 0
文件与文件系统
文件
文件是具有符号名的,在逻辑上具有完整意义的一组相关信息项的集合)有格式的,也可以是无格式的。
信息项是构成文件的基本单位,可以是一个字符,也可以是一个记录。一个文件包括文件体和文件说明。
文件系统
操作系统的文件系统包括两个方面:一方面包括负责管理文件的一组系统软件;另一方面包括被管理的对象—文件。
文件系统的主要功能包括:按名存取、统一的用户接口、并发访问和控制、安全性控制、差错恢复等。
文件类型
根据文件的性质和用途不同,文件有多独分类方法。
按文件的用途,文件可以分系统文件)库文件和用户文件等,
按信息保存期限,文件可以分幅时文件、档案文件和永久文件。
UNIX系统将文件分为普通文件、目录文件和设备文件(特殊文件)等
按文件的保护方式,文件可以分为只读文件、读写文件、可执行文件和不保护文件等。
目前常用的文件系统类型有:FAT、VFAT、Ext2、NTFS、HPFS等。
文件分类的目的是对不同文件进行管理,提高系统效率和用户界面的友好性。
CET4P199
- drum
- beast
- bet
- bore
- marriage
- spade
- crash
- official
- boot
- charm