多线程——引用同步函数解决经典储户银行存钱问题
2016-08-20 09:45
946 查看
package com.work.wor01; /** * 引入同步函数的概念: * * 需求:有两个储户同时到一个银行去存钱,每人存3次,每次存100元。 * 要求打印出银行每次金额的变化情况(假设在储户存钱之前,银行金额为0) * * 分析:得出有两个类:银行和储户 * 这是一个多线程的问题,如何分析他的线程安全问题呢? * 1.通过线程的任务代码分析。 * 2.有没有共享数据,有没有多条语句在操作共享数据。 * */ class Bank{ private int sum = 0; public void add(int num){ try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } sum = sum + num; System.out.println(Thread.currentThread().getName()+"...sum="+sum); } } class Customer implements Runnable{ Bank b = new Bank(); Object obj = new Object(); private int sum = 0; /** * 同步代码块和函数的封装内容是一样的,直接用函数就可以了么? * 答:是不行的。 * 差别在哪里呢?函数不具备同步性,那让函数具备同步性就可以了。 * * 怎么让函数具备同步性呢? * 直接让同步关键字作为修饰符,修饰函数即可,此时函数就具备了同步性。 * * 用同步关键字修饰的函数就是同步函数,它是同步的另一种体现形式。 * 这种形式的特点是写法简单。 * */ @Override public synchronized void run() { for(int i = 0;i<3;i++){ b.add(100); } } } public class BankThread { public static void main(String[] args) { Customer c = new Customer(); Thread t1 = new Thread(c); Thread t2 = new Thread(c); t1.start(); t2.start(); } }
相关文章推荐
- 多线程——用同步代码块解决经典储户银行存钱问题
- 多线程——多线程解决经储户银行存钱问题2
- 基础篇_线程 第5集 多线程的安全问题--解决之道同步函数
- (49)静态同步函数的锁是Class对象,例子:懒汉式--在多线程中存在问题--同步解决
- 04.多线程--05.【多线程银行客户存钱案例设计】【同步函数基本用法和原理】
- 解决多线程代码中的11个常见问题[详细/经典]
- 多线程中Join的运用(困惑的经典问题终于解决)
- 巧妙解决问题:&CMFCcodeDlg::RunCommands”创建指向成员的指针。MFC多线程调用要求调用的接口必须是全局函数或静态成员函数
- codeblocks 多线程 pthread_create 函数未定义引用 解决办法
- java多线程的等待唤醒机制及如何解决同步过程中的安全问题
- synchronized是解决多线程中同步问题的一个关键字
- C++ - 函数模板(function template)右值引用参数 问题 及 解决
- linux 中的进程wait()和waitpid函数,僵尸进程详解,以及利用这两个函数解决进程同步问题
- 用PV操作解决经典进程同步问题 C#实现
- POSIX信号量解决经典同步问题
- JQuery ajax 如何设置同步调用(同时只能触发一个函数) 解决与层显示信息时候的冲突问题
- c++对象成员函数返回自身引用时出现的诡异问题及解决办法
- Java笔记3 多线程<1>线程概述、多线程的创建、多线程的安全问题、静态同步函数的锁、死锁
- 多线程(四)——多线程安全问题之同步函数(This Lock )
- Windows多线程学习(二)多线程互斥同步 关键段解决互斥问题