Java并发编程
蛋子哥
合肥工业大学软件工程专业
展开
-
1-1-Java多线程-概念
定义进程 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.线程 线程是进程的一个实体,进程中的一个执行路径,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.原创 2016-11-20 22:05:57 · 261 阅读 · 0 评论 -
5-1-Java多线程-练习-妖的出现和解决
妖的出现和解决需求资源有姓名和性别。两个线程,一个负责给姓名和性别赋值,一个负责获取姓名和性别的值。要求1,运行一下,解决程序的 “妖”的问题。 分析过程: 加入同步,必须保证同一个锁,解决妖的问题。要求2,实现正确数据的间隔输出 如 张飞–男 rose–女女女 张飞–男 rose–女女女要求3,对代码进行重构。 将name,sex私有化,资源类提供对其访问的方法。要求4原创 2016-11-20 22:31:09 · 368 阅读 · 0 评论 -
4-1-JDK1.5-Lock接口
java.util.concurrent.locks JDK1.5以后提供了多生产多消费的解决方案. Lock接口:比同步有更多的操作.Lock():获取锁,unlock:释放锁;提供了一个更加面向对象的锁,在该锁中提供了更多的显式的锁操作.替代同步 在将旧锁替换为新锁后,那么锁上的监视器方法(wait,notify,notifyALL),也应该替换成新锁的监视器方法.而JD原创 2016-11-20 22:30:47 · 382 阅读 · 0 评论 -
3-5-Java多线程-案例-生产者&消费者wait¬ify
生产者&消费者问题多线程中最为常见的应用案例生产者消费者问题生产和消费同时执行,需要多线程但是执行的任务却不相同,处理的资源却是相同的;线程间通信.描述一下资源描述一下生产者,因为其具备自己的任务描述一下消费者,因为其具备自己的任务代码示例-1代码/*描述资源*//** 属性:商品名称和编号* 行为:对名称赋值,获取商品* */class Resource{ pri原创 2016-11-20 22:29:55 · 388 阅读 · 0 评论 -
3-4-Java多线程-案例-死锁
死锁同步的另一个弊端:情况之一:当线程任务中出现了多个同步(多个锁)时,如果同步中嵌套了其他的同步。 这时容易引发一种现象:死锁。 这种情况能避免就避免掉。//Thread-0synchronized(obj1){ -->thread-0 obj1 synchronized(obj2) { }}//Thread-1synchronized(obj2){原创 2016-11-20 22:29:38 · 313 阅读 · 0 评论 -
3-3-Java多线程-案例-银行存钱&同步函数
银行存钱案例两个客户到一个银行去存钱,每个客户一次存100,存三次。问题:改程序是否有安全问题,如果有写出分析过程并定义解决方案代码示例-未修改前代码class Bank{ private int sum; private Object obj = new Object(); public void add(int num) { sale(num原创 2016-11-20 22:29:21 · 1103 阅读 · 0 评论 -
3-2-Java多线程-案例-单例设计模式出现的问题
单例设计模式出现的问题代码示例class Demo implements Runnable{ public void run() { Single.getInstance(); }}饿汉式 饿汉式多线程并发没有问题class Single { private static final Single SINGLE = new Single();原创 2016-11-20 22:28:52 · 410 阅读 · 0 评论 -
3-1-Java多线程-案例-售票&线程状态
售票案例线程状态 售票的动作需要被多个线程同时执行,所以要使用多线程技术代码示例-线程不安全 代码class Ticket implements Runnable{ private int tickets = 20; /*售票动作需要被多线程执行,那就是线程任务代码*/ private Object object = new Object(); public原创 2016-11-20 22:28:30 · 395 阅读 · 0 评论 -
2-5-Java多线程-创建线程的Runnable接口方法及Thread源码解析
创建线程的Runnable接口方法 public interface Runnable Runnable 接口应该由那些打算通过某一线程执行其实例的类来实现。类必须定义一个称为 run 的无参数方法。 设计该接口的目的是为希望在活动时执行代码的对象提供一个公共协议。例如,Thread 类实现了 Runnable。激活的意思是说某个线程已启动并且尚未停止。 此外,原创 2016-11-20 22:28:08 · 559 阅读 · 0 评论 -
2-4-Java多线程-多线程的异常
多线程的异常代码示例-1class DemoMul1 extends Thread{ private String name; public DemoMul1(String name) { this.name = name; } @Override public void run() { show(); try {原创 2016-11-20 22:27:46 · 259 阅读 · 0 评论 -
2-3-Java多线程-多线程内存图&线程名称
多线程内存图多线程执行时,在栈内存中,其实每一个执行线程都有一片自己所属的栈内存空间。进行方法的压栈和弹栈。当执行线程的任务结束了,线程自动在栈内存这种释放了。但是当所有的执行线程都结束了,进程就结束了 Java的并发采用的是共享内存模型(而非消息传递模型),线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。多个线程之间是不能直接传递数据交互的,它们之间的交互只原创 2016-11-20 22:27:22 · 900 阅读 · 0 评论 -
2-2-Java多线程-继承Thread类原理
继承Thread类原理继承Thread类 因为Thrad类描述线程事务,具备线程的基本功能为什么不直接创建Thread类的对象 这么做没有错,但是该start方法调用的是thread类中的run方法这个方法不做任何操作就返回。更重要的是这个run方法中并没有定义我们需要让线程执行的代码。创建线程的目的是 是为了建立单独的执行路径,让多部分代码实现同时执行,也就是说线程创建并执行需要给原创 2016-11-20 22:08:32 · 495 阅读 · 0 评论 -
2-1-Java多线程-主线程的运行方式
>**当主线程在这个程序中执行时,如果遇到了一定业务逻辑导致执行时间过长,无法执行下面的程序,可不可以实现一个主线程负责执行其中一个,由另一个线程负责其他代码的执行,实现多部分代码同时执行.**>**这就是多线程技术可以解决的问题.**## 如何创建线程>创建线程的两种方式:一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。接下来可以分配并启动该子原创 2016-11-20 22:08:00 · 888 阅读 · 0 评论 -
6-1-Java多线程-多线程细节问题
多线程细节问题sleep方法和wait方法的异同点?相同点: 让线程处于冻结状态.不同点: sleep必须指定时间 wait可以指定时间也可以不指定时间 sleep时间到,线程处于临时阻塞状态或者运行态 wait如果没有时间,必须通过notify或者notifyAll唤醒 sleep不一定非要定义在同步中 wait必须定义在同步中原创 2016-11-20 22:31:56 · 355 阅读 · 0 评论