Java多线程
点滴~
进阶中的工程师
展开
-
Java多线程之一:Java多线程技能
什么是多线程线程是一个单独程序流程。多线程是指一个程序可以同时运行多个任务,每个任务由一个单独的线程来完成。也就是说,多个线程可以同时在一个程序中运行,并且每一个线程完成不同的任务。程序可以通过控制线程来控制程序的运行,例如线程的等待、休眠、唤起线程等。什么是进程进程是一个正在执行的程序 ,比如QQ,迅雷等 一个进程的运行会向CPU申请在内存中开辟一个内存块。 他是向CPU申请资源的,进程之间数据...原创 2018-04-03 00:07:46 · 328 阅读 · 0 评论 -
异步VS同步
参考:https://blog.csdn.net/ideality_hunter/article/details/53453285原创 2018-10-25 22:48:30 · 335 阅读 · 0 评论 -
Java并发知识图谱
原创 2018-08-28 11:40:12 · 1301 阅读 · 1 评论 -
进程中线程同步的四种常用方式
进程中线程同步的四种常用方式:一、 临界区(CCriticalSection)当多个线程访问一个独占性共享资源时,可以使用临界区对象。拥有临界区的线程可以访问被保护起来的资源或代码段,其他线程若想访问,则被挂起,直到拥有临界区的线程放弃临界区为止。具体应用方式:1、 定义临界区对象CcriticalSection g_CriticalSection;2、 在访问共享资源(代码或变量)之前,先获得临...转载 2018-06-11 10:35:12 · 1044 阅读 · 0 评论 -
Java四种线程池的使用
Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。newSingl...转载 2018-06-01 17:03:30 · 129 阅读 · 0 评论 -
线程池的作用
在程序启动的时候就创建若干线程来响应处理,它们被称为线程池,里面的线程叫工作线程 第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。 第三:提高线程的可管理性。 常用线程池:ExecutorService 是主要的实现类,其中常用的有 :Executors.newSingleThread...转载 2018-06-01 16:50:01 · 9625 阅读 · 0 评论 -
Java线程池大小的设置
一般说来,大家认为线程池的大小经验值应该这样设置:(其中N为CPU的个数)如果是CPU密集型应用,则线程池大小设置为N+1如果是IO密集型应用,则线程池大小设置为2N+1如果一台服务器上只部署这一个应用并且只有这一个线程池,那么这种估算或许合理,具体还需自行测试验证。但是,IO优化中,这样的估算公式可能更适合:最佳线程数目 = ((线程等待时间+线程CPU时间)/线程CPU时间 )* CPU数目因...转载 2018-05-31 16:31:48 · 4565 阅读 · 3 评论 -
Java多线程同步的五种方法
一、目的有赞突击面试,毫无防备,这个问题好像被别的公司也问过,没答上来,所以总结一下。二、为什么要线程同步因为当我们有多个线程要同时访问一个变量或对象时,如果这些线程中既有读又有写操作时,就会导致变量值或对象的状态出现混乱,从而导致程序异常。比如一个银行账户,一个取100元,一个存100元。假设原来只有0元,看看会出现什么结果。三、不同情况下的结果不使用同步方法:package com.threa...原创 2018-06-11 15:54:37 · 2422 阅读 · 1 评论 -
Java多线程之七:用Lock、synchronized、阻塞队列三种方法实现生产者消费者模式
一、阻塞队列实现生产者消费者模式package com.lock.producerandconsumer;import java.util.Random;import java.util.concurrent.BlockingQueue;import java.util.concurrent.LinkedBlockingQueue;import java.util.logging.Lev...转载 2018-05-11 16:35:39 · 1115 阅读 · 0 评论 -
lock和synchronized的同步区别与选择
区别如下: 1. lock是一个接口,而synchronized是java的一个关键字,synchronized是内置的语言实现;(具体实现上的区别在《Java虚拟机》中有讲解底层的CAS不同,以前有读过现在又遗忘了。) 2. synchronized在发生异常时候会自动释放占有的锁,因此不会出现死锁;而lock发生异常时候,不会主动释放占有的锁,必须手动unlock来释放锁,可能引起死锁的发生。...转载 2018-04-06 14:35:10 · 134 阅读 · 0 评论 -
Java多线程的悲观锁与乐观锁及各自适用场景
悲观锁 悲观锁,就是不管是否发生多线程冲突,只要存在这种可能,就每次访问都加锁,加锁就会导致锁之间的争夺,有争夺就会有输赢,输者等待。 syncrhoized是一种独占锁,即:占用该锁的线程才可以执行,申请该锁的线程就只能挂起等待,直到占用锁的线程释放锁才唤醒,拿到锁并执行。由于在进程挂起和恢复执行过程中存在着很大的开销,并且当一个线程正在等待锁时,它不能做任何事。所以sync...转载 2018-04-06 13:54:31 · 2129 阅读 · 1 评论 -
Java多线程之六:线程相关问题
1、什么时候抛出InvalidMonitorStateException异常,为什么?调用wait()/notify()/notifyAll()中的任何一个方法时,如果当前线程没有获得该对象的锁,那么就会抛出IllegalMonitorStateException的异常(也就是说程序在没有执行对象的任何同步块或者同步方法时,仍然尝试调用wait()/notify()/notifyAll()时)。由...原创 2018-04-03 20:47:43 · 255 阅读 · 0 评论 -
Java多线程之五:线程定时器
Timer是一个普通的类,其中有几个重要的方法;而TimerTask则是一个抽象类,其中有一个抽象方法run(),类型线程中的run()方法。我们使用Timer创建一个他的对象,然后使用这对象的schedule方法来完成这种间隔的操作。Timer就是一个线程,使用schedule方法完成对TimerTask的调度,多个TimerTask可以共用一个Timer,也就是说Timer对象调用一次s...原创 2018-04-03 20:45:23 · 1318 阅读 · 0 评论 -
Java多线程之四:线程死锁
为了保证数据安全使用 synchronized同步机制, 当线程进入堵塞状态 (不可运行状态和等待状态)时,其他线程无法访问那个加锁对象(除非同步锁被解除),所以一个线程会一直处于等待另一个对象的状态, 而另一个对象又会处于等待下一个对象的状态,以此类推,这个线程“等待”状态链会发生很糟糕的情形,即封闭环状态(也就是说最后那个对象在等待第一个对象的锁)。此时,所有的线程都陷入毫无止境...原创 2018-04-03 20:32:00 · 173 阅读 · 0 评论 -
Java多线程之三:线程间通信
为什么要线程通信1、多个线程并发执行时,在默认情况下CPU是随机切换线程的,当我们需要多个线程来共同完成一件任务,并且我们希望他们有规律的执行,那么多线程之间需要一些协调通信,以此来帮我们达到多线程共同操作一份数据。2、当然如果我们没有使用线程通信来使用多线程共同操作同一份数据的话,虽然可以实现,但是在很大程度会造成多线程之间对同一共享变量的争夺,那样的话势必会造成很多错误和损失。3、所以,我们才...原创 2018-04-03 20:24:43 · 168 阅读 · 0 评论 -
Java多线程之二:线程同步
线程同步 Java 应用程序中的多线程可以共享资源,例如文件、数据库、内存等。当线程以并发模式访问共享数据时,共享数据可能会发生冲突。Java引入线程同步的概念,以实现共享数据的一致性。线程同步机制让多个线程有序的访问共享资源,而不是同时操作共享资源。1 . 同步概念 在线程异步模式的情况下,同一时刻有一个线程在修改共享数据,另一个线程在读取共享数据,当修改共享数据的线程没有...原创 2018-04-03 12:34:32 · 214 阅读 · 0 评论 -
Java并发之AQS详解
https://www.cnblogs.com/waterystone/p/4920797.htmlhttps://mp.weixin.qq.com/s/eyZyzk8ZzjwzZYN4a4H5YA转载 2018-11-16 22:53:46 · 242 阅读 · 0 评论