使用线程同步解决多线程安全问题 上一篇 Java基础-多线程-②多线程的安全问题 中我们说到多线程可能引发的安全问题,原因在于多个线程共享了数据,且一个线程在操作(多为写操作)数据的过程中,另一个线程也对数据进行了操作,从而导致数据出错.由此我们想到一个解决的思路:将操作共享数据的代码行作为一个整体,同一时间只允许一个线程执行,执行过程中其他线程不能参与执行.线程同步就是用来实现这样的机制. synchronized代码块 Java中提供了synchronized关键字,将可能引发安全问题的代码…
线程同步 synchronized:同步的 例:取钱 不做线程同步的场合,假设骗子和户主同时取钱,可能出现这种情况: [骗子]取款2000:账户余额1000 [户主]取款2000:账户余额1000 结果是社会财富增加1000,银行不开心. 代码如下所示: // 账户类 class Account { private int accountBalance = 2000; public void withdraw(String userName, int amount) { System.out.p…
使用synchronized实现同步方法 使用非依赖属性实现同步 在同步块中使用条件(wait(),notify(),notifyAll()) 使用锁实现同步 使用读写锁实现同步数据访问 修改锁的公平性 在锁中使用多条件(Multri Condition) 正文 多个执行线程共享一个资源的情景,是并发编程中最常见的情景之一.多个线程读或者写相同的数据等情况时可能会导致数据不一致.为了解决这些问题,引入了临界区概念.临界区是一个用以访问共享资源的代码块,这个代码块在同一时间内只允许一个线程执行.…
作业解析 利用白富美接口案例,土豪征婚使用匿名内部类对象实现. interface White{ public void white(); } interface Rich{ public void rich(); } interface Beauty{ public void beauty(); } interface WRB extends White, Rich, Beauty{ } class TuHao{ public void getMarry(WRB wrb){ wrb.white…
简单阐释进程和线程 对于进程最直观的感受应该就是“windows任务管理器”中的进程管理: (计算机原理课上的记忆已经快要模糊了,简单理解一下):一个进程就是一个“执行中的程序”,是程序在计算机上的一次运行活动.程序要运行,系统就在内存中为该程序分配一块独立的内存空间,载入程序代码和资源进行执行.程序运行期间该内存空间不能被其他进程直接访问.系统以进程为基本单位进行系统资源的调度和分配.何为线程?线程是进程内一次具体的执行任务.程序的执行具体是通过线程来完成的,所以一个进程中至少有一个线程.回忆…
线程池 * 程序启动一个新线程成本是比较高的,因为它涉及到要与操作系统进行交互.而使用线程池可以很好的提高性能,尤其是当程序中要创建大量生存期很短的线程时,更应该考虑使用线程池.线程池里的每一个线程代码结束后,并不会死亡,而是再次回到线程池中成为空闲状态,等待下一个对象来使用.在JDK5之前,我们必须手动实现自己的线程池,从JDK5开始,Java内置支持线程池* B:内置线程池的使用概述 * JDK5新增了一个Executors工厂类来产生线程池,有如下几个方法  * public static…
线程组 * Java中使用ThreadGroup来表示线程组,它可以对一批线程进行分类管理,Java允许程序直接对线程组进行控制. * 默认情况下,所有的线程都属于主线程组.  * public final ThreadGroup getThreadGroup()//通过线程对象获取他所属于的组  * public final String getName()//通过线程组对象获取他组的名字 * 我们也可以给线程设置分组  * 1,ThreadGroup(String name) 创建线程组对象…
什么是线程的安全问题? 上一篇 Java基础-多线程-①线程的创建和启动 我们说使用实现Runnable接口的方式来创建线程,可以实现多个线程共享资源: class Dog implements Runnable { // 定义线程共享数据 ; @Override public void run() { // TODO:死循环,暂不处理 while (true) { ) { System.out.println("当前线程:" + Thread.currentThread().getN…
java基础-多线程应用案例展示 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.两只熊,100只蜜蜂,蜜蜂每次生产的蜂蜜量是1,罐子的容量是30,熊在罐子的蜂蜜量达到20的时候,一次性将蜂蜜吃光. /* @author :yinzhengjie Blog:http://www.cnblogs.com/yinzhengjie/tag/%E5%B0%8F%E8%AF%95%E7%89%9B%E5%88%80/ EMAIL:y1053419035@qq.com */ packa…
Java并发包——线程同步和锁 摘要:本文主要学习了Java并发包里有关线程同步的类和锁的一些相关概念. 部分内容来自以下博客: https://www.cnblogs.com/dolphin0520/p/3923167.html https://blog.csdn.net/tyyj90/article/details/78236053 线程同步方式 对于线程安全我们前面使用了synchronized关键字,对于线程的协作我们使用Object.wait()和Object.notify().在JD…