java
进击的中国学渣
努力也许改变不了一切,但能改变许多
展开
-
java线程总结-1
既然是学习线程,那就免不了要学习进程。很多人都会问这么一个问题进程和线程的区别。 做个小总结: 1:进程是应用程序在操作系统中一次执行过程,而线程是进程的一部分必须依附于进程进行,可以说是进程的一个分支 2:进程之间不会互相影响,一个进程挂了,另一个进程还可以继续进行。但是一个进程下,假如有20个线程,挂一个,其他19个都挂了,所以进程更加健壮 3:进程虽然更加健原创 2017-01-08 23:04:34 · 197 阅读 · 0 评论 -
java线程池
1 线程池简介 线程池,从字面意思来看,是指管理一组同构工作线程的资源池。线程池是与工作队列密切相关的,其中在工作队列中保存了所有等待执行的任务。工作者线程的任务很简单:从工作队列中获得一个任务,执行任务,然后返回线程池并且等待下一个任务。 2 线程池优势 “在线程池中执行任务”比“为每一个任务分配一个线程”优势更多。通过重用现有的线程,而不是创建新的线程,可以在处理多个请求的时候分摊在线程创原创 2017-09-27 11:21:56 · 408 阅读 · 0 评论 -
基于Executor的简单的web服务器demo
很多没有接触过web服务器的人可能会觉得web服务器是一件很牛的事情。我想说想写一个性能很好的web服务器是一件很困难的事,但是如果是一个demo还是很简单的。 基于Executor来构建Web服务器是非常容易的。用一个简单的demo来说明一下web服务器。 首先得明白一组java组件,Socket和ServerSocket Socket负责和2个进程间的交互 ServerSocket负责监原创 2017-09-27 10:52:26 · 292 阅读 · 0 评论 -
如何使用Future和ConcurrentHashMap实现一个线程安全且高效的缓存
几乎所有的服务器应用程序都会使用某种形式的缓存。重用之前的结果,以及来降低延迟,提高吞吐量。 像许多重复发明的轮子一样,缓存看上去非常简单。然而,简单的缓存可能会大大提升系统的瓶颈。我们现在首先来实现一个简单的缓存,通过一步步深入来构建一个并发安全且高效的缓存。 构建场景:我们的系统中有一个比较耗时的查询操作,定义为searchUser,如果不使用缓存那么我们会每次都去数据库进行一个耗时的查询。原创 2017-09-26 18:17:02 · 1490 阅读 · 0 评论 -
信号量Semaphore
计数信号量(Semaphore)用来控制同时访问某个特定资源的操作数量,或者同时执行某个指定操作的数量。计数信号量还可以用来实现某种资源池,或者执行某个指定操作的数量。计数信号量还可以用来实现某种资源池,或者对容器加边界。 Semaphore中管理着一组虚拟的许可,许可的初始数量可以通过构造函数来指定。在执行操作时,可以首先获得许可,并在使用以后释放许可。如果没有许可。那么acquire操作将一直原创 2017-09-26 16:30:56 · 370 阅读 · 0 评论 -
FutureTask使用demo
FutureTask表示的计算是通过Callable来实现的,相当于一种可生成结果的Runnable,并且可以处于以下三种状态:等待运行,正在运行,运行结束。执行完成表示所有可能的结束方式,包括正常结束,由于取消而结束和由于异常而结束等。当FutureTask进入完成状态后,它会永远停在这个状态上。 FutureTask.get的行为取决于任务的状态。如果任务已经完成,那么get会立即返回结果,否原创 2017-09-26 15:59:56 · 631 阅读 · 0 评论 -
快速排序-java实现
快速排序是目前现有的最优时间复杂度的排序算法,核心思想是选择一个数作为序列的基准数,将比它大的数放到右边,比它小的数放到它的左边。那么在一次循环之后,这个数的左边都比它小,右边都比它大。所以这个数对于最终结果来说,它已经放在它应该在的位置。因而我们只需要通过递归的思想对基准数左右进行相同的操作即可。所以我们得到如下代码:/** * 快速排序启动器 * @param a原创 2017-08-31 23:28:25 · 241 阅读 · 0 评论 -
ThreadLocal使用介绍
维持线程封闭性的一种常用方法是使用ThreadLocal,这是一个相对于线程来说是全局的变量。可以理解成线程的全局变量。ThreadLocal方法提供了get和set方法,这些方法为每个使用该变量的线程都存有一份独立的副本,因此get总是返回当前执行线程在调用set时设置的最新值。 ThreadLocal对象通常用于防止对可变的单实例变量或全局变量进行共享。例如,在单线程应用程序中可能会维持一个全原创 2017-09-24 16:29:12 · 149 阅读 · 0 评论 -
如何写一个死锁的java程序
写多线程的程序的时候要避免产生死锁,那我们首先要知道怎么会产生死锁才能预防死锁。接下来用java写一个会产生死锁的程序。 新建一个类DeadLockpublic class DeadLock implments Runnable{ public boolean flag; public static Object o1 = new Object(); publi原创 2017-08-20 11:14:57 · 484 阅读 · 0 评论 -
如何用java写一个死锁的程序
之前写过一个死锁的程序,是通过Thread类来实现的,写的不够直观,而且没有附上结果。现在用线程池写一个,并且附上结果。代码如下:/** * 测试死锁 * @author shuyweng * */public class TestDeadLock { public boolean flag; public static Object o1 = new Object();原创 2017-07-22 18:41:39 · 796 阅读 · 0 评论 -
java的八种基本数据类型
1 逻辑型,boolean2 字符型,char 占2个字节3 整数型,byte,占1个字节 ,short,占2个字节 ,int,占4个字节 ,long,占8个字节4 浮点型,double,占8个字节 ,float,占4个字节其中float f = 1234.5是错误的,必须加f原创 2017-07-08 12:00:54 · 181 阅读 · 0 评论 -
map的遍历方式
map可以通过1 map.valuesfor(String str:map.values()){}2 map.entrySet()for(Map.entry entry:map.entrySet()){}3 map.keySet()for(String key:map.keySet()){}具体的细节就不写了,很简单的三种方式原创 2017-02-17 15:35:07 · 310 阅读 · 0 评论 -
如何写一个内存溢出的程序
刚刚写了一个产生死锁的程序,现在要写一个产生内存溢出的程序。开发的时候要尽可能地避免内存溢出,我们要知道如何产生内存溢出才会知道如何避免内存溢出。 public static void main(String[] args){ List list = new ArrayList(); while(true){ l原创 2017-01-10 18:07:29 · 2145 阅读 · 0 评论 -
java反射学习(结合工厂方法)
java反射的应用什么是反射? JAVA反射机制是就是运行的状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。反射的应用场景? 在讲反射的应用场景之前,先来讨论一个开发当中碰到的场景。一步步深入,最后就会发现反射对于代码的质量会有一个质的提升。假设我们的数原创 2017-09-03 18:27:44 · 279 阅读 · 0 评论