java多线程

package a;

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

public class Copy extends JFrame implements ActionListener,Runnable

{

    int value;

    JProgressBar progressBar1,progressBar;

    JButton button1,button2;

    Label label;

    Thread thread;

    public Copy()

    {

        super("文件复制进度条演示");

        this.setSize(700,400);

        this.setLocationRelativeTo(null);

        this.setDefaultCloseOperation(EXIT_ON_CLOSE);

        this.setLayout(new GridLayout(4,3));

        JPanel cmdpanel1=new JPanel();

        JPanel cmdpanel2=new JPanel();

        this.add(cmdpanel1);

        this.add(cmdpanel2);

        cmdpanel1.add(this.button1=new JButton("复制文件"));

        cmdpanel1.add(this.button2=new JButton("取消"));

        this.button2.setEnabled(false);

        this.button1.addActionListener(this);

        this.button2.addActionListener(this);

        cmdpanel2.add(this.label=new Label("                                    "));

        this.label.setVisible(true);

        this.add(this.progressBar = new JProgressBar());

        progressBar.setForeground(Color.blue);

        progressBar.setStringPainted(true);

        progressBar.setValue(0);

        this.thread=new Thread(this);

        this.setVisible(true);

    }

    public void actionPerformed(ActionEvent event)

    {

        if(event.getSource()==this.button1)

        {

            this.thread.start();

            this.button1.setEnabled(false);

            this.button2.setEnabled(true);

            this.label.setVisible(true);

        }

        if(event.getSource()==this.button2)

        {

            this.thread.interrupt();

            this.label.setText("文本复制已完成0%");

            updateProgressBar(0);

            this.button1.setEnabled(true);

            this.button2.setEnabled(false);

        }

    }

    public void run()

    {

        while(true)

        {

            try

            {

                value=progressBar.getValue()+1;

                this.label.setText("文本复制已完成"+progressBar.getValue()+"%");

                Thread.sleep(10);

                updateProgressBar(value);

                if(progressBar.getValue()==100)

                {

                   this.label.setText("文件复制已完成!");

                   break;

                }

            }

            catch(InterruptedException ex)

            {

                break;

            }

        }

    }

    private void updateProgressBar(int value)

    {

        progressBar.setValue(value);

    }

    public static void main(String[] args)

    {

        new Copy();

    }

}

package a;

public class Bank

{

    Depositor account;

    public void put(Depositor account,double value)

    {

        this.account=account;

        if(value>0)

        this.account.put(this.account,value);

    }

    public static void main(String[] args)

    {

        Depositor W=new Depositor("Wang");

        Depositor L=new Depositor("Li");

        Depositor Z=new Depositor("Zhang");

        (new SaveThread(W,L,100)).start();

        (new SaveThread(L,L,100)).start();

        (new SaveThread(Z,L,100)).start();

    }

}

package a;

public class Depositor

{

    String name;

    double balance;

    Depositor account;

    Depositor(String name)

    {

        this.name=name;

        this.balance=0;

    }

    public void put(Depositor account,double value)

    {

        this.account=account;

        this.account.balance+=value;

        System.out.println("存入"+value+",余额"+this.account.balance());

        this.account.balance+=value;

        System.out.println("存入"+value+",余额"+this.account.balance());

        this.account.balance+=value;

        System.out.println("存入"+value+",余额"+this.account.balance());

    }

    public String getName()

    {

        return this.name;

    }

    public double balance()

    {

        return this.balance;

    }

}

package a;

public class SaveThread extends Thread

{

    private Depositor account1,account2;

    Bank bank=new Bank();

    private double value;

    public SaveThread(Depositor account1,Depositor account2,double value)

    {

        this.account1=account1;

        this.account2=account2;

        this.value=value;

    }

    public void run()

    {

        synchronized(this.account2)

        {

            try

            {

                Thread.sleep(1);

            }

            catch(InterruptedException ex) {}

            System.out.println(this.account1.getName()+"账户:向"+this.account2.getName()+"账户存款");

            bank.put(this.account2,this.value);

        }

    }

}

 

 

 

 

 

 

posted @ 2019-11-27 23:18  陌路离殇℡  阅读(107)  评论(0编辑  收藏  举报