62,621
社区成员
发帖
与我相关
我的任务
分享
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class SynchronizedTest {
public static void main(String[] args) {
ExecutorService es = Executors.newCachedThreadPool();
A a = new A();
B b = new B(a);
C c = new C(a);
es.submit(b);
es.submit(c);
}
}
class A{
private List<Integer> messages = new ArrayList<Integer>();
public void add(int message){
messages.add(message);
}
public List<Integer> getMessages() {
return messages;
}
public void setMessages(List<Integer> messages) {
this.messages = messages;
}
public void dothis(){
synchronized(messages){
try {
System.out.println(messages);
Thread.sleep(4000);
System.out.println("now" + messages);
messages.clear();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class B implements Runnable{
private A a;
public B(A a){
this.a = a;
}
@Override
public void run() {
System.out.println("start thread b");
a.dothis();
}
}
class C implements Runnable{
private A a;
public C(A a){
this.a = a;
}
@Override
public void run() {
System.out.println("start Thread c");
a.add(1);
a.add(2);
System.out.println("next Thread "+ a.getMessages());
}
}
public synchronized void dothis(messages){
try {
Thread.sleep(4000);
System.out.println(messages);
messages.clear();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class SynchronizedTest {
public static void main(String[] args) {
ExecutorService es = Executors.newCachedThreadPool();
A a = new A();
B b = new B(a);
C c = new C(a);
es.submit(b);
es.submit(c);
}
}
class A{
private List<Integer> messages = new ArrayList<Integer>();
public void add(int message){
synchronized(messages){
messages.add(message);
}
}
public List<Integer> getMessages() {
return messages;
}
public void setMessages(List<Integer> messages) {
this.messages = messages;
}
public void dothis(){
synchronized(messages){
try {
System.out.println(messages);
Thread.sleep(1000);
System.out.println("now" + messages);
messages.clear();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class B implements Runnable{
private A a;
public B(A a){
this.a = a;
}
@Override
public void run() {
System.out.println("start thread b");
a.dothis();
}
}
class C implements Runnable{
private A a;
public C(A a){
this.a = a;
}
@Override
public void run() {
System.out.println("start Thread c");
a.add(1);
a.add(2);
System.out.println("next Thread "+ a.getMessages());
}