java线程同步(一)
发布日期:2021-05-10 14:39:28 浏览次数:19 分类:精选文章

本文共 5936 字,大约阅读时间需要 19 分钟。

Java������������

���Java���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

1. ���������������������

���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

2. ������������������

������������������������������������������������������������������������������������������������������

  • ������������������ Account ������������������������������������������
  • ������������������ DrawThread ������������ Runnable ���������������������������������������������������
  • ��������� Threadbank ���������������������������������������������������������������������
  • ������������������������������������������������������������������������������������������������������������������������������������

    3. ���������������������������

    ������������������������������������������������������������������������������������������������������������������

    ��������������� join() ������

    join() ������������������������������������������������������������������������������������������������ join ������������������������������������������������������������������������������������������

    public class Threadbank {
    public static void main(String[] args) {
    Account account = new Account("WHQ", 1000);
    Thread t1 = new Thread(new DrawThread(account, 800), "���");
    Thread t2 = new Thread(new DrawThread(account, 800), "���");
    t1.start();
    try {
    t1.join(); // ���������������������
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    t2.start();
    try {
    t2.join(); // ���������������������
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    }

    ������������������������������������������������������������������������������������������������������������������

    ��������������� synchronized ���������

    synchronized ���������������������������������������������������������������������������������������������������������

    ���������������������������������

    ��� synchronized ������������������������������������

    class Account {
    // ���������������������������������
    public synchronized void draw(double drawAmount) {
    // ������������������
    if (balance >= drawAmount) {
    System.out.println(Thread.currentThread().getName() + " ���������������������������" + drawAmount);
    balance -= drawAmount;
    System.out.println("\t������ :" + balance);
    } else {
    System.out.println(Thread.currentThread().getName() + " ���������������������������!");
    }
    }
    }

    ������������������������������

    ��� synchronized ������������������������

    class Account {
    // ���������������������������������
    public synchronized void draw(double drawAmount) {
    // ������������������
    if (balance >= drawAmount) {
    System.out.println(Thread.currentThread().getName() + " ���������������������������" + drawAmount);
    balance -= drawAmount;
    System.out.println("\t������ :" + balance);
    } else {
    System.out.println(Thread.currentThread().getName() + " ���������������������������!");
    }
    }
    }

    ������������������������������������������������ synchronized��������������������������������������� static ��������������� synchronized������������������������������������������������������������������������������������������������

    4. ���������������������������

    • synchronized ���������������������������������������������������������
    • synchronized ���������������������������������������������������

    ������������������������ synchronized ��������� join() ���������������������������������������������������������

    5. ������������������

    ������������������������������

    class Account {
    private String accountNo;
    private double balance;
    public String getAccountNo() { return accountNo; }
    public double getBalance() { return balance; }
    public Account(String accountNo, double balance) {
    this.accountNo = accountNo;
    this.balance = balance;
    }
    public synchronized void draw(double drawAmount) {
    if (balance >= drawAmount) {
    System.out.println(Thread.currentThread().getName() + " ���������������������������" + drawAmount);
    balance -= drawAmount;
    System.out.println("\t������ :" + balance);
    } else {
    System.out.println(Thread.currentThread().getName() + " ���������������������������!");
    }
    }
    }
    class DrawThread implements Runnable {
    private Account account;
    private double drawAmount;
    public DrawThread(Account account, double drawAmount) {
    this.account = account;
    this.drawAmount = drawAmount;
    }
    @Override
    public void run() {
    account.draw(drawAmount);
    }
    }
    public class Threadbank {
    public static void main(String[] args) {
    Account account = new Account("WHQ", 1000);
    Thread t1 = new Thread(new DrawThread(account, 800), "���");
    Thread t2 = new Thread(new DrawThread(account, 800), "���");
    t1.start();
    t2.start();
    }
    }

    6. ������������

    • ������������������������������������������������������������������
    • ���������������������
    • ���������������������
    • ���������������������������������������������������������������

    7. ������

    ������synchronized���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

    上一篇:2. 两数相加
    下一篇:Java并发总结(二)

    发表评论

    最新留言

    第一次来,支持一个
    [***.219.124.196]2025年04月22日 20时29分45秒