ReadWriteDataSyn.java
package com.shubh.lock.vs.synchronization;
import java.util.Date;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class ReadWriteDataSyn {
/*synchronized public void writeData(Object document) {
try {
Long duration = (long) (Math.random() * 10000);
System.out.println(Thread.currentThread().getName() + ": Resource(ReadWriteData) : write a Job" + " during "
+ (duration / 1000) + " seconds :: Start Time At - " + new Date());
Thread.sleep(duration);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
System.out.printf("%s: The document has been" + " written\n", Thread.currentThread().getName());
}
}
synchronized public void readData(Object document) {
try {
Long duration = (long) (Math.random() * 10000);
System.out.println(Thread.currentThread().getName() + ": Resource(ReadWriteData) : read a Job during "
+ (duration / 1000) + " seconds :: Start At - " + new Date());
Thread.sleep(duration);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
System.out.printf("%s: The document has" + " been read\n", Thread.currentThread().getName());
}
}*/
public void writeData(Object document) {
try {
synchronized (this) {
Long duration = (long) (Math.random() * 10000);
System.out.println(Thread.currentThread().getName() + ": Resource(ReadWriteData) : write a Job"
+ " during " + (duration / 1000) + " seconds :: Start Time At - " + new Date());
Thread.sleep(duration);
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
System.out.printf("%s: The document has been" + " written\n", Thread.currentThread().getName());
}
}
public void readData(Object document) {
try {
synchronized (this) {
Long duration = (long) (Math.random() * 10000);
System.out.println(Thread.currentThread().getName() + ": Resource(ReadWriteData) : read a Job during "
+ (duration / 1000) + " seconds :: Start At - " + new Date());
Thread.sleep(duration);
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
System.out.printf("%s: The document has" + " been read\n", Thread.currentThread().getName());
}
}
}
ReadJobSyn.java
package com.shubh.lock.vs.synchronization;
public class ReadJobSyn implements Runnable {
private ReadWriteDataSyn readWriteData;
ReadJobSyn(ReadWriteDataSyn tr) {
this.readWriteData = tr;
}
@Override
public void run() {
System.out.println("read job");
readWriteData.readData(new Object());
}
}
WriteJobSyn.java
package com.shubh.lock.vs.synchronization;
public class WriteJobSyn implements Runnable {
private ReadWriteDataSyn readWriteData;
WriteJobSyn(ReadWriteDataSyn tr) {
this.readWriteData = tr;
}
@Override
public void run() {
System.out.println("write job");
readWriteData.writeData(new Object());
}
}
SynchronizedTest.java
package com.shubh.lock.vs.synchronization;
public class SynchronizedTest {
public static void main(String[] args) {
ReadWriteDataSyn readWriteData = new ReadWriteDataSyn();
Thread thread[] = new Thread[10];
for (int i = 5; i < 10; i++) {
thread[i] = new Thread(new ReadJobSyn(readWriteData), "Thread " + i);
}
for (int i = 0; i < 5; i++) {
thread[i] = new Thread(new WriteJobSyn(readWriteData), "Thread " + i);
}
for (int i = 0; i < 10; i++) {
thread[i].start();
}
}
}
Output:
write job
write job
write job
read job
read job
read job
read job
write job
read job
write job
Thread 1: Resource(ReadWriteData) : write a Job during 9 seconds :: Start Time At - Sun Jun 09 18:38:15 IST 2019
Thread 1: The document has been written
Thread 4: Resource(ReadWriteData) : write a Job during 1 seconds :: Start Time At - Sun Jun 09 18:38:25 IST 2019
Thread 4: The document has been written
Thread 2: Resource(ReadWriteData) : write a Job during 2 seconds :: Start Time At - Sun Jun 09 18:38:26 IST 2019
Thread 2: The document has been written
Thread 6: Resource(ReadWriteData) : read a Job during 8 seconds :: Start At - Sun Jun 09 18:38:28 IST 2019
Thread 6: The document has been read
Thread 7: Resource(ReadWriteData) : read a Job during 5 seconds :: Start At - Sun Jun 09 18:38:37 IST 2019
Thread 7: The document has been read
Thread 8: Resource(ReadWriteData) : read a Job during 5 seconds :: Start At - Sun Jun 09 18:38:43 IST 2019
Thread 8: The document has been read
Thread 5: Resource(ReadWriteData) : read a Job during 5 seconds :: Start At - Sun Jun 09 18:38:48 IST 2019
Thread 5: The document has been read
Thread 9: Resource(ReadWriteData) : read a Job during 0 seconds :: Start At - Sun Jun 09 18:38:53 IST 2019
Thread 9: The document has been read
Thread 0: Resource(ReadWriteData) : write a Job during 1 seconds :: Start Time At - Sun Jun 09 18:38:54 IST 2019
Thread 0: The document has been written
Thread 3: Resource(ReadWriteData) : write a Job during 4 seconds :: Start Time At - Sun Jun 09 18:38:56 IST 2019
Thread 3: The document has been written
- Lock Interface In Concurrency API
- Lock In Java Example
- StampedLock With Examples
- Differences between Lock and Synchronized block
- Method And Block Synchronization In Java Example
- How To Create Custom Lock
- Fair Lock In Java Example
- Synchronization Vs Lock in java
- Thread Pool - ThreadPoolExecutor Example
- How To Create Custom Thread Pool
- How ConcurrentHashMap Works Internally
- newsinglethreadexecutor vs newfixedthreadpool
- Future Vs Completablefuture
- ExecutorService vs ExecutorCompletionService in Java
- Callable Interface Example
- CompletableFuture
- ExecutorCompletionService
- Method And Block Synchronization
- ConcurrentHashMap
- Differences Between Submit and Execute methods
- Difference Between Callable and Runnable Interface in Java
No comments:
Post a Comment