package concurrency;import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class OperateThreadSyn implements Runnable{ private int a = 0;
private int b = 0;
public int getA() {
return a;
}
public int getB() {
return b;
}
void operateFields(){
a++;
Thread.yield();
b++;
}
@Override
public void run(){
while((getB() + getA()) % 2 == 0){
System.out.println(getA() + "," + getB());
operateFields();
}
System.out.println("不是偶数,执行失败了!!");
}
public static void main(String[] args){
OperateThreadSyn ots = new OperateThreadSyn();
ExecutorService exec = Executors.newCachedThreadPool();
for(int i = 0 ; i < 3 ;i++){
exec.execute(ots);
}
exec.shutdown();
}
}
//=================上面的这个程序为何执行了半天也没有出现我想要的结果,
//=====我想要的结果就是看到这句的执行 System.out.println("不是偶数,执行失败了!!");
//但是我一直都没有看到
//===但是如果是把一个句子删除 得到如下的程序 则能够满足我的要求 求大神解释package concurrency;import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class OperateThreadSyn implements Runnable{ private int a = 0;
private int b = 0;
public int getA() {
return a;
}
public int getB() {
return b;
}
void operateFields(){
a++;
Thread.yield();
b++;
}
@Override
public void run(){
while((getB() + getA()) % 2 == 0){
// System.out.println(getA() + "," + getB());
operateFields();
}
System.out.println("不是偶数,执行失败了!!");
}
public static void main(String[] args){
OperateThreadSyn ots = new OperateThreadSyn();
ExecutorService exec = Executors.newCachedThreadPool();
for(int i = 0 ; i < 3 ;i++){
exec.execute(ots);
}
exec.shutdown();
}
}
并发编程
import java.util.concurrent.Executors;public class OperateThreadSyn implements Runnable{ private int a = 0;
private int b = 0;
public int getA() {
return a;
}
public int getB() {
return b;
}
void operateFields(){
a++;
Thread.yield();
b++;
}
@Override
public void run(){
while((getB() + getA()) % 2 == 0){
System.out.println(getA() + "," + getB());
operateFields();
}
System.out.println("不是偶数,执行失败了!!");
}
public static void main(String[] args){
OperateThreadSyn ots = new OperateThreadSyn();
ExecutorService exec = Executors.newCachedThreadPool();
for(int i = 0 ; i < 3 ;i++){
exec.execute(ots);
}
exec.shutdown();
}
}
//=================上面的这个程序为何执行了半天也没有出现我想要的结果,
//=====我想要的结果就是看到这句的执行 System.out.println("不是偶数,执行失败了!!");
//但是我一直都没有看到
//===但是如果是把一个句子删除 得到如下的程序 则能够满足我的要求 求大神解释package concurrency;import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class OperateThreadSyn implements Runnable{ private int a = 0;
private int b = 0;
public int getA() {
return a;
}
public int getB() {
return b;
}
void operateFields(){
a++;
Thread.yield();
b++;
}
@Override
public void run(){
while((getB() + getA()) % 2 == 0){
// System.out.println(getA() + "," + getB());
operateFields();
}
System.out.println("不是偶数,执行失败了!!");
}
public static void main(String[] args){
OperateThreadSyn ots = new OperateThreadSyn();
ExecutorService exec = Executors.newCachedThreadPool();
for(int i = 0 ; i < 3 ;i++){
exec.execute(ots);
}
exec.shutdown();
}
}
并发编程
你把它改成System.out.print("0");你就能看到你想要的效果了。最终为什么出现这个效果,是因两个线程之间的切换加循环形成的。懂不?
问你一个问题:如果是因为System.out.println(getA() + "," + getB())输出太快而导致我没有看见这句System.out.println("不是偶数,执行失败了!!")的输出,那么,我想问一下,如果System.out.println("不是偶数,执行失败了!!")确实输出了,那么输出这句的这个线程应该会结束,为何它输出System.out.println("不是偶数,执行失败了!!")这个之后还没有结束呢???这是为什么呢!!!