07 2022 档案

摘要:public class Test { private int queueSize = 10; private PriorityQueue<Integer> queue = new PriorityQueue<Integer>(queueSize); private Lock lock = new 阅读全文
posted @ 2022-07-14 15:44 烟笼寒山 阅读(22) 评论(0) 推荐(0)
摘要:public class Test { private int queueSize = 10; private PriorityQueue<Integer> queue = new PriorityQueue<Integer>(queueSize); public static void main( 阅读全文
posted @ 2022-07-14 15:39 烟笼寒山 阅读(43) 评论(0) 推荐(0)
摘要:Condition是在java 1.5中才出现的,它用来替代传统的Object的wait()、notify()实现线程间的协作,相比使用Object的wait()、notify(),使用Condition1的await()、signal()这种方式实现线程间协作更加安全和高效。因此通常来说比较推荐使 阅读全文
posted @ 2022-07-14 15:34 烟笼寒山 阅读(651) 评论(0) 推荐(0)
摘要:调用notifyAll()方法能够唤醒所有正在等待这个对象的monitor的线程;这一点与notify()方法是不同的。notifyAll()方法只是唤醒等待该对象的monitor的线程,并不决定哪个线程能够获取到monitor。举个简单的例子:假如有三个线程Thread1、Thread2和Thre 阅读全文
posted @ 2022-07-14 15:26 烟笼寒山 阅读(328) 评论(0) 推荐(0)
摘要:调用某个对象的notify()方法能够唤醒一个正在等待这个对象的monitor的线程,如果有多个线程都在等待这个对象的monitor,则只能唤醒其中一个线程; notify()方法能够唤醒一个正在等待该对象的monitor的线程,当有多个线程都在等待该对象的monitor的话,则只能唤醒其中一个线程 阅读全文
posted @ 2022-07-14 15:25 烟笼寒山 阅读(1417) 评论(0) 推荐(0)
摘要:wait()、notify()和notifyAll()是Object类中的方法: /** * Wakes up a single thread that is waiting on this object's * monitor. If any threads are waiting on this 阅读全文
posted @ 2022-07-14 15:18 烟笼寒山 阅读(50) 评论(0) 推荐(0)
摘要:interrupt()方法 interrupt,顾名思义,即中断的意思。单独调用interrupt方法可以使得处于阻塞状态的线程抛出一个异常,也就说,它可以用来中断一个正处于阻塞状态的线程;另外,通过interrupt方法和isInterrupted()方法来停止正在运行的线程。 下面看一个例子:p 阅读全文
posted @ 2022-07-14 15:15 烟笼寒山 阅读(545) 评论(0) 推荐(0)
摘要:join()方法join方法有三个重载版本:join()join(long millis) //参数为毫秒join(long millis,int nanoseconds) //第一参数为毫秒,第二个参数为纳秒假如在main线程中,调用thread.join(有参数)方法,则main方法会等待thr 阅读全文
posted @ 2022-07-14 15:10 烟笼寒山 阅读(325) 评论(0) 推荐(0)
摘要:sleep()方法sleep()方法有两个重载版本:sleep(long millis) //参数为毫秒sleep(long millis,int nanoseconds) //第一参数为毫秒,第二个参数为纳秒 sleep相当于让线程睡眠,交出CPU,让CPU去执行其他的任务。但是有一点要非常注意, 阅读全文
posted @ 2022-07-14 14:58 烟笼寒山 阅读(867) 评论(0) 推荐(0)
摘要:线程从创建到最终的消亡,要经历若干个状态。一般来说,线程包括以下这几个状态:创建(new)、就绪(runnable)、运行(running)、阻塞(blocked)、睡眠或等待一定的时间(time waiting(sleep))、等待被唤醒(waiting)、消亡(dead)。 创建(new): 当 阅读全文
posted @ 2022-07-14 14:37 烟笼寒山 阅读(78) 评论(0) 推荐(0)
摘要:公共数据接口,FutureData和RealData都要实现。public interface Data { //获取线程结果 public abstract String getRequest();} FutureData,当有线程想要获取RealData的时候,程序会被阻塞。等到RealData 阅读全文
posted @ 2022-07-14 11:10 烟笼寒山 阅读(63) 评论(0) 推荐(0)
摘要:synchronized是java中的一个关键字,也就是说是Java语言内置的特性。那么为什么会出现Lock呢?如果一个代码块被synchronized修饰了,当一个线程获取了对应的锁,并执行该代码块时,其他线程便只能一直等待,等待获取锁的线程释放锁,而这里获取锁的线程释放锁只会有两种情况: 1)获 阅读全文
posted @ 2022-07-14 10:43 烟笼寒山 阅读(69) 评论(0) 推荐(0)
摘要:ReentrantReadWriteLock里面提供了很多丰富的方法,不过最主要的有两个方法:readLock()和writeLock()用来获取读锁和写锁。 下面通过几个例子来看一下ReentrantReadWriteLock具体用法。假如有多个线程要同时进行读操作的话,先看一下synchroni 阅读全文
posted @ 2022-07-14 10:40 烟笼寒山 阅读(38) 评论(0) 推荐(0)
摘要:ReadWriteLock也是一个接口,在它里面只定义了两个方法:public interface ReadWriteLock { /** * Returns the lock used for reading. * * @return the lock used for reading. */ L 阅读全文
posted @ 2022-07-14 10:37 烟笼寒山 阅读(48) 评论(0) 推荐(0)
摘要:lockInterruptibly()方法:比较特殊,当通过这个方法去获取锁时,如果线程正在等待获取锁,则这个线程能够响应中断,即中断线程的等待状态。也就使说,当两个线程同时通过lock.lockInterruptibly()想获取某个锁时,假若此时线程A获取到了锁,而线程B只有在等待,那么对线程B 阅读全文
posted @ 2022-07-14 10:35 烟笼寒山 阅读(509) 评论(0) 推荐(0)
摘要:tryLock()方法:是有返回值的,它表示用来尝试获取锁,如果获取成功,则返回true,如果获取失败(即锁已被其他线程获取),则返回false,也就说这个方法无论如何都会立即返回。在拿不到锁时不会一直在那等待。 tryLock(long time, TimeUnit unit)方法:和tryLoc 阅读全文
posted @ 2022-07-14 10:29 烟笼寒山 阅读(2063) 评论(0) 推荐(1)
摘要:lock()方法:是平常使用得最多的一个方法,就是用来获取锁。如果锁已被其他线程获取,则进行等待。由于在前面讲到如果采用Lock,必须主动去释放锁,并且在发生异常时,不会自动释放锁。因此一般来说,使用Lock必须在try{}catch{}块中进行,并且将释放锁的操作放在finally块中进行,以保证 阅读全文
posted @ 2022-07-14 10:27 烟笼寒山 阅读(722) 评论(0) 推荐(0)
摘要:所在包:java.util.concurrent.locks Lock是一个接口:public interface Lock { void lock(); void lockInterruptibly() throws InterruptedException; boolean tryLock(); 阅读全文
posted @ 2022-07-14 10:21 烟笼寒山 阅读(102) 评论(0) 推荐(0)
摘要:synchronized代码块类似于以下这种形式:synchronized(synObject) { }当在某个线程中执行这段代码块,该线程会获取对象synObject的锁,从而使得其他线程无法同时访问该代码块。synObject可以是this,代表获取当前对象的锁,也可以是类中的一个属性,代表获取 阅读全文
posted @ 2022-07-14 10:12 烟笼寒山 阅读(2867) 评论(0) 推荐(0)
摘要:算法原理: (1)与锁相比,使用比较交换(下文简称CAS)会使程序看起来更加复杂一些。但由于其非阻塞性,它对死锁问题天生免疫,并且,线程间的相互影响也远远比基于锁的方式要小。更为重要的是,使用无锁的方式完全没有锁竞争带来的系统开销,也没有线程间频繁调度带来的开销,因此,它要比基于锁的方式拥有更优越的 阅读全文
posted @ 2022-07-14 10:05 烟笼寒山 阅读(278) 评论(0) 推荐(0)
摘要:1、子类拥有所有父类非private的方法,即使不显示定义,也可以调用这些方法 2、当子类覆盖了父类的方法时,调用时调用覆盖后的方法 3、对于未覆盖的方法,即调用的是父类中的方法 4、即使显示的覆盖了父类的private的方法,但也不生效。 阅读全文
posted @ 2022-07-13 16:12 烟笼寒山 阅读(246) 评论(0) 推荐(0)
摘要:定义:在Java中,把没有定义任何方法和常量的接口称之为标记接口,经常看到的一个最典型的标记接口就是"Serializable",这个接口也是没有定义任何方法和常量的 标记接口的作用: 主要作用就是给某个对象打上一个标志,告诉JVM,这个对象可以做什么, 比如实现了"Serializable"接口的 阅读全文
posted @ 2022-07-13 16:10 烟笼寒山 阅读(215) 评论(0) 推荐(0)
摘要:1.clone()函数的用途是用来另存一个当前存在的对象。 2.hashCode() 方法返回散列码值,散列码是由对象导出的一个整数值。 在Object中有一个hashCode方法来得到散列码。基本上,每一个对象都有一个默认的散列码,其值就是对象的内存地址。 我们可以重写这个方法。 3.toStri 阅读全文
posted @ 2022-07-13 16:06 烟笼寒山 阅读(56) 评论(0) 推荐(0)
摘要:不new对象时 public class HelloA { public HelloA(){//构造函数 System.out.println("A的构造函数"); } {//构造代码块 System.out.println("A的构造代码块"); } static {//静态代码块 System. 阅读全文
posted @ 2022-07-13 16:01 烟笼寒山 阅读(53) 评论(0) 推荐(0)
摘要:总结: 静态代码块只初始化一次,且容器启动时初始化; 静态代码块和静态变量从上往下依次执行普通代码块比构造方法先执行,且对象每new一次,就会调用一次 静态代码块 格式: static {//静态代码块 } 关于静态代码块,要注意的是: 它是随着类的加载而执行,只执行一次,并优先于主函数。具体说,静 阅读全文
posted @ 2022-07-13 15:43 烟笼寒山 阅读(100) 评论(0) 推荐(0)
摘要:什么时候会进行类加载? 程序要执行的时候。 概括来说,java程序运行要经过编译和执行。详细来说,应该为:编译》类加载》执行。 其中,类加载主要是由jvm虚拟机负责的,过程非常复杂,类加载分三步: 加载 》 连接 》初始化 1、加载:这个很简单,程序运行之前jvm会把编译完成的.class二进制文件 阅读全文
posted @ 2022-07-13 15:38 烟笼寒山 阅读(46) 评论(0) 推荐(0)