public class SharedObject {
// Changes made to SharedObject in one thread may not be
// immediately reflect in other thread
static int sharedVariable = 8;
}
/**
* Suppose two threads are working on SharedObject. If two threads run on
* different processes each thread may have its own local copy of
* sharedVariable. If one thread modifies its value the changes might not
* reflect in the original one in the main memory instantly.
*
*/
public class SharedObject {
// Changes made to SharedObject in one thread may not be
// immediately reflect in other thread
static volatile int sharedVariable = 8;
}
Explanation: here changes made by one thread to shared data are visible to other threads.
import java.util.logging.Level;
import java.util.logging.Logger;
public class VolatileExe {
private static final Logger LOGGER = Logger.getLogger(VolatileExe.class.getName());
private static volatile int MY_INT = 0;
public static void main(String[] args) {
new ChangeListener().start();
new ChangeMaker().start();
}
static class ChangeListener extends Thread {
@Override
public void run() {
int local_value = MY_INT;
while (local_value < 5) {
if (local_value != MY_INT) {
LOGGER.log(Level.INFO, "Got Change for MY_INT : {0}", MY_INT);
local_value = MY_INT;
}
}
}
}
static class ChangeMaker extends Thread {
@Override
public void run() {
int local_value = MY_INT;
while (MY_INT < 5) {
LOGGER.log(Level.INFO, "Incrementing MY_INT to {0}", local_value + 1);
MY_INT = ++local_value;
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
// Changes made to SharedObject in one thread may not be
// immediately reflect in other thread
static int sharedVariable = 8;
}
/**
* Suppose two threads are working on SharedObject. If two threads run on
* different processes each thread may have its own local copy of
* sharedVariable. If one thread modifies its value the changes might not
* reflect in the original one in the main memory instantly.
*
*/
public class SharedObject {
// Changes made to SharedObject in one thread may not be
// immediately reflect in other thread
static volatile int sharedVariable = 8;
}
Explanation: here changes made by one thread to shared data are visible to other threads.
import java.util.logging.Level;
import java.util.logging.Logger;
public class VolatileExe {
private static final Logger LOGGER = Logger.getLogger(VolatileExe.class.getName());
private static volatile int MY_INT = 0;
public static void main(String[] args) {
new ChangeListener().start();
new ChangeMaker().start();
}
static class ChangeListener extends Thread {
@Override
public void run() {
int local_value = MY_INT;
while (local_value < 5) {
if (local_value != MY_INT) {
LOGGER.log(Level.INFO, "Got Change for MY_INT : {0}", MY_INT);
local_value = MY_INT;
}
}
}
}
static class ChangeMaker extends Thread {
@Override
public void run() {
int local_value = MY_INT;
while (MY_INT < 5) {
LOGGER.log(Level.INFO, "Incrementing MY_INT to {0}", local_value + 1);
MY_INT = ++local_value;
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
No comments:
Post a Comment