읽기 및 쓰기 잠금 장치 : 읽기 잠금 장치와 쓰기 잠금 장치로 나누어 져있는 다중 독서 잠금 장치는 징계하지 않고, 잠금을 읽고, 자물쇠를 제어하는 자체는 해당 잠금 장치 만 적용하면됩니다. 코드가 데이터 만 읽으면 많은 사람들이 동시에 읽을 수는 있지만 동시에 쓸 수없는 경우 코드를 읽으면 사람 만 작성하고 동시에 읽을 수 없습니다. 그런 다음 잠금 에센스를 씁니다 요컨대, 읽을 때 자물쇠를 읽고 쓸 때 자물쇠를 씁니다!
3 개의 스레드가 데이터를 읽고 3 개의 스레드가 데이터 예제를 작성합니다.
동시에 읽을 수 있고 동시에 쓸 수없고 동시에 쓸 수 없으며 글을 쓸 때 읽을 수 없습니다.
잠금을 읽을 때 잠금 해제를 읽으십시오.
마침내 잠금 해제에주의하십시오.
com.ljq.test.thread java.util.current.locks.readwritelock; public static void main (string [] args) {최종 readwrite rw = new readWrite (int i = 0; i <3; i ++) {public void run () {while (true). {rw.read ();}} .Start () {public void run () {rw.write (new random (). nextInt (10000)) .Start ();}}} /** * 상호 독점을 읽고 쓰십시오. 동일한 클래스에 넣으십시오 * @Authouse Administrator * /class readWrite {private 객체 data = null; 데이터이지만 동시에 데이터를 읽을 수있는 여러 스레드가 있습니다. READLOCK RWL = READ void () {lekeal (); .sleep ((long) (math.random () * 1000); theys.println. {e.printstacktrace ();} 최종적으로 {rwl.readlock ();} * @param data * / publi c void write (객체 데이터) {rwl.writelock () (); try.println () .println (stride.currentthread (). getName () + " + data) {e);
캐시 시스템 캐시 시스템 설계 : 데이터를 가져와야하는 경우 공개 객체 GetData (String Key) 메소드를 호출해야합니다. , 누군가 다음 에이 데이터에 올 것이고, 데이터베이스에서 찾지 않고이 번호를 직접 반환 할 것입니다. 데이터에 대한 데이터베이스를 찾지 마십시오.
com.ljq.test.thread java.util.map; System * * * @Author Administrator */Public Class Cachedemo {private map <string, object> cache = new Hashmap <String, object> () {String key = "name"; Cachedemo Cachedemo (Cachedemo.getData); Caching} private readwritelock rwl = public objectdata g key. / 먼저 내부 메모리에 값이 있는지 확인하십시오 (value == null) {// 그렇지 않은 경우 데이터베이스로 이동하려면 데이터베이스를 확인하고 내부 메모리에서 찾은 결과를 저장하십시오. // 읽기 잠금 해제 , leock rwl.readlock (). rwl.writelock (); out.println ( "데이터베이스에서 데이터 읽기") value = "Zhang San"; rwl.readlock ();}} rwl.readlock (). 값;}}
후면 결과 :