自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 《并发编程》--14.Java线程池和自定义线程

为了避免频繁的创建和销毁线程,减少CPU的压力,线程池就应运而生。newFixedThreadPool()方法:该方法返回一个只有一个线程的线程池,该线程池的数量是固定始终不变。当有新任务提交时,线程池中若有空闲线程,将会立即执行。若么有空闲线程,则会被暂存在任务队列中,待有空闲线程时,才能处理任务队列的任务。newSingleThreadExecutor()方法:该方法返回一个只有一

2017-08-31 11:19:22 244

原创 《并发编程》--13.CountDownLatch和CyclicBarrier

CountDownLatch(倒计时器)指子线程所有执行完毕后,主线程继续执行。适应于火箭发射,发令枪响等。执行如下代码很容易理解public class countdown { public static void main(String[] args) { final CountDownLatch latch = new CountDownLa

2017-08-31 10:25:22 354

原创 《并发编程》--12.读写锁

ReadWriteLock是jdk5中国提供的读写分离锁。读写分离锁可以有效的帮助减少所竞争,用来提供系统的性能。 读写读非阻塞阻塞写阻塞阻塞解释:读--读不互斥:读与读之间互不干扰,不阻塞读--写互斥:读阻塞写,写阻塞读写--写互斥:写写阻塞如果在系统中,读操作的词远大于写操作次数,则读写所就会返

2017-08-29 16:34:29 204

原创 《并发编程》--11.允许多个线程同时访问的信号量Semaphpre

信号量为多线程协作提供了更为强大的控制方法。广义上说,信号量是对锁的拓展。无论是内部所synchronized还是重入锁ReentrantLock,一次都只允许一个线程访问一块资源,而信号量却可以指定多个线程数,同时访问一个资源。信号量主要提供一下构造函数; public Semaphore(int permits) { sync = new NonfairSync(perm

2017-08-29 16:12:20 394

原创 《并发编程》--10.重入锁

在jdk5的时代,重入锁可以完全替代synchronized。但从jdk6开始对synchronized做了大量的优化,使两者在性能上差距不大。以下是冲入锁的一段简单代码public class ReenterLock implements Runnable { public static ReentrantLock lock = new ReentrantLock(); public

2017-08-29 14:45:39 294

原创 《并发编程》--9.线程安全和synchronizd关键字

线程安全是并行开发的基础。一般来说,程序并行就是为了获得更高的执行效率,但是高效率不能牺牲正确性为代价,否则将毫无意义。故jdk提供了synchronized关键字,来实现线程之间的同步。他的工作就是对同步的代码加锁,使得这段代码有且只有一个线程执行,从而保证线程间的安全性synchronized关键字可以有很多用法,我做了一个简单的整理,如下1.指定对象加锁:进入同步代码前需

2017-08-29 11:19:15 304

原创 《并发编程》--8.线程优先级

Java中的线程具有自己的优先级。优先级高的线程在竞争资源的时候更容易抢到资源。当然这只是概率的问题,如果人品不好,也会出现抢不过低优先级的情况。由于线程的优先级调度和底层的操作系统有着密切的联系,并且也不容易预测,无法精确的控制。比如一个低优先级的线程可能一直抢不到资源,而使用无法运行,就可能产生饥饿(虽然优先级低,但也不能饿死他啊),因为在严格的情况下,需要自己的代码层解决线程调度的问题。

2017-08-18 16:11:33 244

原创 《并发编程》--7.声明线程组

如果在一个系统中,线程数量特别多,而且功能分配比较明确,那就可以将相同功能的线程放在一个线程组里。线程组里的线程同时启动,同时停止。线程组的使用很简单,如下一个简单的demopublic class threadGroup implements Runnable{ public static void main(String[] args) { ThreadGroup tg = ne

2017-08-18 15:30:01 240

原创 《并发编程》--6.Java内存模型(JMM)的关键字volatile

Java的内存模型(JMM)都是围绕着原子性,有序性,可见性。一些特殊的场合下,需要用volatile等关键字保证这些特性。当用volatile声明一个变量时,就相当于告诉虚拟机,这个变量极有可能在多个线程中修改。为了确保这个变量被修改后,程序的所有线程都能够意识到这个改动,虚拟机就必须采用一些特殊的手段,保证这个变量的可见性。声明的代码如下:static volatile i

2017-08-18 14:26:15 227

原创 《并发编程》--5.线程等待结束(join)和线程谦让(yield)

在很多情况下,一个线程的输出可能非常依赖于另外一个或者多个线程的数据。在这种情况下,这个线程就需要等待依赖线程执行完毕,才能继续执行。jdk就给我们提供了join()这个方法。public final void join() throws InterruptedException;public final synchronized void join(long millis) throws I

2017-08-18 11:40:13 264

原创 《并发编程》--4.线程等待(wait)和线程通知(notity)

为了支持多线程之间的操作,jdk提供了线程等待(wait)和线程通知(notity)两个非常重要的方法,这两个方法是来自object类而不是thread类中。所以任何对象都可以调用这两个方法 。    当一个对象调用了wait()方法后,当前线程就会在这个对象上等待,直至其他线程调用了notity(),这就是线程之间的通信手段    如果一个线程调用了obj.wait(),它就会计入obj

2017-08-17 14:29:22 482

原创 《并发编程》--3.中断线程

表面意思:让线程停止执行。其实并非如此线程中断并不会是线程立即退出,而是给线程发送一个通知,告诉该线程,别的希望你退出了!至于目标线程接到通知后会如何处理,需要目标线程自己决定。注意:这里一定要区别线程终止和线程中断线程中断的3个方法 public void Thread.interrupt(); //中断线程 public boolean Thread.isinterrupt(

2017-08-17 11:55:13 205

原创 《并发编程》--2.终止线程

通常情况下,线程执行完毕后都会自动结束,不需要手动关闭。但是也有特殊的时候。一些服务器的后台程序可能是常驻系统,他们不会正常终结。所以在一些特殊的情况下,需要我们手动终止线程。查阅jdk就会发现,有stop方法可能终止线程,但仔细发现,stop是一个废弃的方法。因为:thread.stop()方法在结束线程的时候,会直接终止线程,并且也会释放这个线程的所有锁,在这些锁刚好都是维护对象一致性

2017-08-17 11:19:44 203

原创 《并发编程》--1.新建线程

新建线程需要使用new关键字创建一个线程对象,并且将它start()起来就行。Thread t = new Thread();t.start();线程t起来之后,有一个run()方法。start()方法就会新建一个线程并且让这个线程执行run()方法。单独调用run方法,只是普通的调用而已,如下Thread t = new Thread(){ @Override

2017-08-17 10:49:11 223

原创 两种方法解决js中touch和click冲突问题

直接清除touch事件document.removeEventListener("touchstart", self.pageLockHandler, false);document.removeEventListener("touchend", self.pageLockHandler, false);function pageLockHandler(e) {    e.preventD

2017-08-10 16:47:56 9891

原创 z-index的用法,不生效问题

.p-z-index{ position:absolute; left:0px; top:0px; z-index:-1; }值         描述auto 默认。堆叠顺序与父元素相等。number 设置元素的堆叠顺序,数值越大,层次越靠上。为-1时在最底部。inherit 规定应该从父元素继承 z-index 属性的值。PS:Z-index 仅能

2017-08-10 16:40:23 2347

原创 js切换图片方式形成动画

function secend_animation(){ var petbigeye = $("#petbigeye").val(); var petsmalleye = $("#petsmalleye").val(); var kidweaklight = $("#kidweaklight").val(); var kidpowerfullight = $("#kidpowerf

2017-08-10 16:30:39 1511

原创 css实现图片不断显示与隐藏,类似星星闪动

/**hi的显示与隐藏*/.hiAnimation { position:absolute; -webkit-animation-name: fadeInOut; -webkit-animation-timing-function: ease-in-out; -webkit-animation-iteration-count: infinite;

2017-08-10 16:26:07 2560

原创 css3图片飞走动画特效

.kidfly_animation{position:relative;animation:myfirst 5s;-moz-animation:myfirst 5s; /* Firefox */-webkit-animation:myfirst 5s; /* Safari and Chrome */-o-animation:myfirst 5s; /* Opera */}@keyfr

2017-08-10 16:24:02 2356

原创 css3的animation-play-state属性实现GIF图的暂停与播放

.firework { display: block; width: 100px; height: 100px; background: url(web_firework_animation.png) 0 0 no-repeat; background-size: 200%; animation: heart-burst steps(28) 0.9s in

2017-08-04 10:45:47 2269

原创 总结H5前端优化

一 加载优化加载过程是最为耗时的过程,可能会占到总耗时的80%时间,因此是优化的重点1. 减少HTTP请求因为手机浏览器同时响应请求为4个请求(Android支持4个,iOS 5后可支持6个),所以要尽量减少页面的请求数,首次加载同时请求数不能超过4个a) 合并CSS、JavaScriptb) 合并小图片,使用雪碧图2. 缓存使用缓存可以减少向服务器的请求数,节

2017-08-03 10:37:39 264

原创 字蛛(FontSpider,中文字体压缩器)网页自由引入中文字体

如果设计师面试一位 Web 前端工程师,其中有一段这样的对话:“如果设计师希望用图片实现某个字体样式,而从技术的角度来说这样不合理,但设计师非常坚持,这时候你怎么办?”“我会给设计师讲解工程上面临的问题,争取他理解。例如:如果文本使用图片,以新浪站点的访问量来说,这里会需要消耗大量的服务器资源,至少需要增加多台服务器,增加带宽流量消耗”。这些年 Web 前端技术在迅猛的发展

2017-08-03 10:19:29 773

原创 Redis的特点及与Memcache的特点的区别

Redis的特点Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,

2017-08-02 17:17:13 356

原创 Session的常用方法

方法名:void setAttribute(String attribute, Object value)描述:设置Session属性。value参数可以为任何Java Object。通常为java Bean。value信息不宜过大方法名:String getAttribute(String attribute)描述:返回Session属性方法名:Enumeration

2017-08-01 11:39:46 458

原创 session的生命周期和有效期

session的生命周期Session保存在服务器端。为了获得更高的存取速度,服务器一般把Session放在内存里。每个用户都会有一个独立的Session。如果Session内容过于复杂,当大量客户访问服务器时可能会导致内存溢出。因此,Session里的信息应该尽量精简。Session在用户第一次访问服务器的时候自动创建。需要注意只有访问JSP、Servlet等程序时才会创建Session

2017-08-01 11:28:18 1608

原创 Cookie的修改、删除,清除

Cookie并不提供修改、删除操作。如果要修改某个Cookie,只需要新建一个同名的Cookie,添加到response中覆盖原来的Cookie。如果要删除某个Cookie,只需要新建一个同名的Cookie,并将maxAge设置为0,并添加到response中覆盖原来的Cookie。注意是0而不是负数。负数代表其他的意义。读者可以通过上例的程序进行验证,设置不同的属性。注意!!!修

2017-08-01 11:13:48 12483

原创 Cookie的所有属性

属性名:name(String)描述:该Cookie的名称。Cookie一旦创建,名称便不可更改属性名:value(Object) 描述:该Cookie的值。如果值为Unicode字符,需要为字符编码。如果值为二进制数据,则需要使用BASE64编码属性名:maxAge(int) 描述:该Cookie失效的时间,单位秒。如果为正数,则该Cookie在maxAge秒之后失效

2017-08-01 10:59:14 957

原创 Java日志级别debug info warn error fatal

Debug(调试)         这个级别最低!!!一般的来说,在系统实际运行过程中,一般都是不输出的。 如果这个级别不输出的话,可以随意的使用,任何觉得有利于在调试时更详细的了解系统运行状态,比如输入变量的值,对象等等。当然,在每一个 Debug 调用之前,一定要加上 If 判断。Info(信息)        这个应该用来反馈系统的当前状态给最终用户的,所以,在这里输出的

2017-08-01 10:28:30 2089

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除