线程的同步
用户在处理多线程的时候,变量有可能被多个线程共享,简单举一个例子,就是当一个工资负责人正在使用账本出账的是时候,一个员工也要使用账本来领取工资,这时情况就是工资未出账完成就被领取了,这就造成混乱.
为了解决类似的问题Java就作出了线程同步的方法,就是用synchronized关键字修饰一个方法,当这个方法被synchronized
关键字修饰后,线程调用这个方法时就不会被打扰,也就是另一个线程要等待线程执行完该方法后才能到自己执行该方法.
总的来说,所谓线程同步就是若干个线程使用synchronized
关键字修饰的方法
结合出账例子
package Chapter_15.Part_4;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class myWindow extends JFrame implements ActionListener {
Bank bank;
Thread thread1;
Thread thread2;
JTextArea jTextArea1;
JTextArea jTextArea2;
JButton jButton;
public myWindow() {
bank = new Bank();
thread1 = new Thread(bank);
thread1.setName("存");
thread2 = new Thread(bank);
thread2.setName("取");
setBounds(500, 500, 500, 500);
setLayout(new FlowLayout());
setTitle("演示");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
jButton = new JButton("开始演示");
jButton.addActionListener(this);
add(jButton);
jTextArea1 = new JTextArea(5, 16);
add(new JScrollPane(jTextArea1));
jTextArea2 = new JTextArea(5, 16);
add(new JScrollPane(jTextArea2));
bank.setMoney(100);
bank.setText1(jTextArea1, jTextArea2);
validate();
}
@Override
public void actionPerformed(ActionEvent actionEvent) {
if (thread1.isAlive() == false && thread2.isAlive() == false) {
thread1 = new Thread(bank);
thread1.