0%

线程间的通信

volatile 和 synchronized 关键字

volatile关键字

volatile关键字修饰就是告知程序任何对变量的访问均需要从共享内存中获取,而对它的改变必须同步刷新会共享内存,保证所有线程对变量访问的可见性。

synchronized 关键字

synchronized关键字可以修饰方法或者以同步块的形式进行使用,确保多个线程在同一时刻,只能有一个线程处于方法或者同步块中,保证了线程对变量访问的可见性和排他性。

在下面的代码中,使用了同步块和同步方法,通过使用javap工具查看生成的class文件信息来分析synchronized关键字的实现细节,示例如下。

阅读全文 »

线程间的通信

volatile 和 synchronized 关键字

volatile关键字

volatile关键字修饰就是告知程序任何对变量的访问均需要从共享内存中获取,而对它的改变必须同步刷新到共享内存,保证所有线程对变量访问的可见性。

synchronized 关键字

synchronized关键字可以修饰方法或者以同步块的形式进行使用,确保多个线程在同一时刻,只能有一个线程处于方法或者同步块中,保证了线程对变量访问的可见性和排他性。

在下面的代码中,使用了同步块和同步方法,通过使用javap工具查看生成的class文件信息来分析synchronized关键字的实现细节,示例如下。

阅读全文 »

从输入url到页面展示到底发生了什么

转自:http://www.cnblogs.com/xianyulaodi/p/6547807.html#_label4

面试这道题基本是必考题,二月份面试的时候,虽然知道这个过程发生了什么,不过当面试官一步步追问下去的,很多细节就不太清楚了。所以在这对这个问题深入总结一下。

阅读全文 »

阿里编程题—数组四等分

题目:
对于一个长度为N的整型数组A, 数组里所有的数都是正整数,对于两个满足0<=X <= Y <N的整数,
A[X], A[X+1] … A[Y]构成A的一个切片,记作(X, Y).
用三个下标 m1, m2, m3下标满足条件0 < m1, m1 + 1 < m2, m2 +1 < m3 < N – 1。
可以把这个整型数组分成(0, m1-1), (m1+1, m2-1), (m2+1, m3-1), (m3+1, N-1) 四个切片。
如果这四个切片的整数求和相等,称作“四等分”。 编写一个函数,求一个给定的整型数组是否可以四等分
要求: 函数的计算复杂度为O(N),使用的额外存储空间(除了输入的数组之外)最多为O(N)。

阅读全文 »

阿里编程题—数组四等分

题目:
对于一个长度为N的整型数组A, 数组里所有的数都是正整数,对于两个满足0<=X <= Y <N的整数,
A[X], A[X+1] … A[Y]构成A的一个切片,记作(X, Y).
用三个下标 m1, m2, m3下标满足条件0 < m1, m1 + 1 < m2, m2 +1 < m3 < N – 1。
可以把这个整型数组分成(0, m1-1), (m1+1, m2-1), (m2+1, m3-1), (m3+1, N-1) 四个切片。
如果这四个切片的整数求和相等,称作“四等分”。 编写一个函数,求一个给定的整型数组是否可以四等分
要求: 函数的计算复杂度为O(N),使用的额外存储空间(除了输入的数组之外)最多为O(N)。

阅读全文 »

Java中的锁

Lock接口

Java中的锁

Lock接口

队列同步器

重入锁

重入锁ReentrantLock

读写锁

生产者-消费者问题的多种 Java 实现方式

生产者消费者问题是研究多线程程序时绕不开的经典问题之一,它描述是有一块缓冲区作为仓库,生产者可以将产品放入仓库,消费者则可以从仓库中取走产品。生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。

解决生产者/消费者问题的方法可分为两类:

  1. 采用某种机制保护生产者和消费者之间的同步
    • 采用synchronized锁以及wait()/notify()方法实现
    • 采用Lock锁以及await()/signal()方法实现
    • BlockingQueue阻塞队列方法
    • Semaphore方法
  2. 在生产者和消费者之间建立一个管道。
    • PipedInputStream/PipedOutputStream

第一种方式有较高的效率,并且易于实现,代码的可控制性较好,属于常用的模式。
第二种管道缓冲区不易控制,被传输数据对象不易于封装等,实用性不强。

阅读全文 »

生产者-消费者问题的多种 Java 实现方式

生产者消费者问题是研究多线程程序时绕不开的经典问题之一,它描述是有一块缓冲区作为仓库,生产者可以将产品放入仓库,消费者则可以从仓库中取走产品。生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。

解决生产者/消费者问题的方法可分为两类:

  1. 采用某种机制保护生产者和消费者之间的同步
    • 采用synchronized锁以及wait()/notify()方法实现
    • 采用Lock锁以及await()/signal()方法实现
    • BlockingQueue阻塞队列方法
    • 信号量(Semaphore)方法
  2. 在生产者和消费者之间建立一个管道。
    • PipedInputStream/PipedOutputStream

第一种方式有较高的效率,并且易于实现,代码的可控制性较好,属于常用的模式。
第二种管道缓冲区不易控制,被传输数据对象不易于封装等,实用性不强。

阅读全文 »