用4个线程 2个让i++ 另外2个让i-- 打印出来 虽然最终结果是100 (i一开始等于100) 但是中间不明白的是 i=101 i=102...这样一直下去 换个线程打印的时候显示的是i= 差很远的数字。。 也就是说没有接着原来的数字加减。。
下面是代码 本人初识多线程求大神们解答
public class test {
/**
* @param args
*/
public static int i = 100;
public static void main(String[] args) {
testThread t1 = new testThread(1);
testThread t2 = new testThread(1);
testThread t3 = new testThread(0);
testThread t4 = new testThread(0);
new Thread(t1).start();
new Thread(t2).start();
new Thread(t3).start();
new Thread(t4).start();
}}class testThread implements Runnable{
private int j;
public testThread(int j){
this.j=j;
}
public testThread(){}
public void run(){
int count = 50;
while(count>0){
if(j==1){
//add();
System.out.println("当前线程:"+Thread.currentThread().getName()+"增加票数至"+(++test.i)+"张");
}else if(j==0){
System.out.println("当前线程:"+Thread.currentThread().getName()+"减少票数至"+(--test.i)+"张");
//modfiy();
}
count--; }
}
/*public synchronized void add(){
System.out.println("当前线程:"+Thread.currentThread().getName()+"增加票数至"+(++test.i)+"张");
}
public synchronized void modfiy(){
Syste*/
}
多线程java
下面是代码 本人初识多线程求大神们解答
public class test {
/**
* @param args
*/
public static int i = 100;
public static void main(String[] args) {
testThread t1 = new testThread(1);
testThread t2 = new testThread(1);
testThread t3 = new testThread(0);
testThread t4 = new testThread(0);
new Thread(t1).start();
new Thread(t2).start();
new Thread(t3).start();
new Thread(t4).start();
}}class testThread implements Runnable{
private int j;
public testThread(int j){
this.j=j;
}
public testThread(){}
public void run(){
int count = 50;
while(count>0){
if(j==1){
//add();
System.out.println("当前线程:"+Thread.currentThread().getName()+"增加票数至"+(++test.i)+"张");
}else if(j==0){
System.out.println("当前线程:"+Thread.currentThread().getName()+"减少票数至"+(--test.i)+"张");
//modfiy();
}
count--; }
}
/*public synchronized void add(){
System.out.println("当前线程:"+Thread.currentThread().getName()+"增加票数至"+(++test.i)+"张");
}
public synchronized void modfiy(){
Syste*/
}
多线程java
解决方案 »
- 请教一个乱码问题
- java程序 转换成 .exe 的提问
- Hibernate+spring 连接多个数据库问题!在线急等!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- servlet乱码
- GUI的一个奇怪的问题:诡异的鼠标事件
- 这些类在哪里 api里找不到啊
- static void f(int i)要修改i的值竟然无法做到?这就是java呀?通过包装类也无法直接修改成员变量值,还要重新创建一个对象传回引用,真恶
- 网络爬虫网页禁止
- 关于JTable右键选取
- java中碰到对地址的操作怎么办?
- 如何实现在SWING窗体内打开PDF
- 请教一个“Swing界面”的代码运行效果与预期不符的原因...
相差很远么?
可能是如此。
线程A 在打印的时候,正准备打印 i=100;
这个时候,线程B抢去了资源,让A没有打印。于是线程B就连续进行了20次相加。
结果最后打印出i=120;
这个时候,线程A再夺回执行权。
但是他打印的结果,却依然按照100进行打印。
但是如果A属于减的线程,那么下一条应该是打印出119.而不是99.当然,线程具有一些不确定性,我也不了解,而且你这里有这么多,具体可能出现更加难以理解的情况吧。