多线程
瓜牛呱呱
Hope is a good thing
展开
-
Java多线程知识点总结——进阶篇(一)之卖票程序
在上篇文章中我们留了个小练习题,下面我将会一步一步的解决一些多线程上的基础经典问题,大神请忽略我的自嗨 需求:火车票多个窗口卖票程序。 说明:有四个窗口同时买一个车厢中的100个座位 不多说,直接上代码: class Ticket extends Thread { private int tick = 100; public void run() { ...原创 2018-03-30 16:32:46 · 332 阅读 · 0 评论 -
Java多线程知识点总结——进阶篇(十一) 之 守护线程(后台运行)
如果你想让你的线程在后台运行,那么你可以调用: Thread.setDaemon(true); 但是有一点需要注意的: 如果你设置你的线程后守护线程,那么如果主线程执行完了,那么后台程序也会跟着退出! 样例代码如下: class DaemonThread implements Runnable { public synchronized void run() { ...原创 2018-03-31 21:29:34 · 235 阅读 · 0 评论 -
Java多线程知识点总结——进阶篇(十) 之 中断线程
在停止线程运行时有一种特殊情况,就是当线程处于了冻结状态时,就不会读取到while循环的标记,那么线程就不会结束。 如下代码:class StopThread implements Runnable { private boolean flag =true; public synchronized void run() { while(flag)原创 2018-03-31 21:20:12 · 204 阅读 · 0 评论 -
Java多线程知识点总结——进阶篇(九) 之 停止线程
如何停止线程? 只有一种,run方法结束。 开启多线程运行,运行代码通常是循环结构。只要控制住循环,就可以让run方法结束,也就是线程结束。 注意:stop方法已经过时。 实例代码如下: class StopThread implements Runnable { private boolean flag = true; //控制循环是否退出的标志 ...原创 2018-03-31 20:32:54 · 256 阅读 · 0 评论 -
Java多线程知识点总结——进阶篇(八) 之 等待唤醒机制 Lock 锁升级版
JDK1.5 中提供了多线程升级解决方案。 将同步 Synchronized 替换成现实 Lock 操作。 将Object中的 wait、notify、notifyAll,替换成了Condition 对象。该对象可以对 Lock 锁进行获取。该示例中,实现了本方只唤醒对方操作。 Lock: 替代了 Synchronized,关键API有: lock () ...原创 2018-03-31 16:14:12 · 317 阅读 · 0 评论 -
Java多线程知识点总结——进阶篇(七) 之 等待唤醒机制
1、线程的通信方式通信: 其实就是多个线程在操作同一个资源,但是操作的动作不同。 2、API介绍 Object.wait():在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。 Object.notify():唤醒在此对象监视器上等待的单个线程。 Object.notifyAll():唤醒在此对象监视器上等待的所...原创 2018-03-31 15:47:48 · 249 阅读 · 0 评论 -
Java多线程知识点总结——进阶篇(六) 之 死锁
如何理解死锁呢?其实简单的可以理解为:同步中嵌套同步,比如: 线程甲拿着锁A,想要锁B 线程乙拿着锁B,想要锁A 这样两个的线程就卡死了 死锁实例代码: class Ticket implements Runnable { private int tick = 1000; Object obj = new Object(); boolea...原创 2018-03-31 13:24:43 · 188 阅读 · 0 评论 -
Java多线程知识点总结——进阶篇(五)之多线程下的单例模式
饿汉式 饿汉式多线程和单线程的代码是一样的,如下: class Single { private static final Single s = new Single(); private Single(){} public static Single getInstance() { return s; } } 懒汉式 为什么 syn...原创 2018-03-31 13:06:56 · 223 阅读 · 1 评论 -
Java多线程知识点总结——进阶篇(四)之静态同步函数用的是哪一个锁问题
如果同步函数被静态修饰后,使用的锁是什么呢? 通过验证,发现不再是this。因为静态方法中也不可以定义this。 静态函数进内存时,内存中还没有本类对象,但是一定有该类对应的字节码文件对象。 类名.class 该对象的类型是Class 结论: 静态的同步方法,使用的锁是该方法所在类的字节码文件对象。 类名.class 测试代码如下: class...原创 2018-03-31 11:59:29 · 328 阅读 · 0 评论 -
Java多线程知识点总结——进阶篇(三)之同步函数用的是哪一个锁问题
函数需要被对象调用。那么函数都有一个所属对象引用。就是this。 所以同步函数使用的锁是this。 通过该程序进行验证。 使用两个线程来买票。 一个线程在同步代码块中。一个线程在同步函数中。都在执行买票动作。 代码如下: class Ticket implements Runnable { private int tick = 100; Object o...原创 2018-03-31 11:46:17 · 175 阅读 · 0 评论 -
Java多线程知识点总结——进阶篇(二)之判断程序是否有线程安全问题
需求: 银行有一个金库。 有两个储户分别存300员,每次存100,存3次。 目的:该程序是否有安全问题,如果有,如何解决? 看如下代码,思考会出现什么问题: class Bank { private int sum; public void add(int n) { sum = sum + n; try {Thread...原创 2018-03-31 11:21:01 · 457 阅读 · 1 评论 -
Java多线程知识点总结——基础篇
1、进程和线程的区别进程: 是一个正在执行中的程序。每一个进程执行都有一个执行顺序。该顺序是一个执行路径,或者叫一个控制单元。 线程: 就是进程中的一个独立的控制单元。线程在控制着进程的执行。 关系: 一个进程中至少有一个线程。 经典的例子: QQ程序,整个QQ是一个进程,N多个聊天窗口其实就是启动N多个线程2、创建线程的两种金典方法实现Runnable接口 继承Thread类 都是重写r原创 2018-03-30 15:15:16 · 283 阅读 · 0 评论 -
Java多线程知识点总结——进阶篇(十二) 之 Join方法 & 优先级 & yield方法
join方法 方法说明:等待该线程终止。 通俗来说就是 当A线程执行到了B线程的.join()方法时,A就会等待。等B线程都执行完,A才会执行。 样例代码如下: class Demo implements Runnable { public synchronized void run() { for (int x = 0; x < 70; x++) { ...原创 2018-03-31 23:46:31 · 272 阅读 · 0 评论