我写这个程序目的:
1,实现数字在0到10之间来回递增或者递减,到数字递增到10时,数字开始
递减到0;当数字递减到0时开始递增到10,依次循环;
2,实用同步实现
3,理解多线程的原理
程序运行后的错误:
st:2
st:3
st:4
st:5
st:6
st:7
st:8
st:9
windows:0
st:10
//程序停在这儿就不动了!!
我的问题:
1,在执行RUN之间的代码,两个线程都是从1开始,为何i的值没发生改变
2,我的错误在哪?
3,out()方法中的notifyall没有执行!!源代码如下
:
class Number10 implements Runnable{
private int i=1;
public void run(){
synchronized(this){
while(true){
if (Thread.currentThread().getName().equalsIgnoreCase("st"))
{
input();
}
else if(Thread.currentThread().getName().equalsIgnoreCase("windows"))
{
out();
}
System.out.println(Thread.currentThread().getName() + ":" +i);
}
}
}
public void out(){
if(i==0)
{
try {
wait();
}
catch (java.lang.InterruptedException ex) {
ex.printStackTrace();
}
}
i--;
//notifyAll();
}
public void input(){
if(i==10)
{
try {
wait();
}
catch (java.lang.InterruptedException ex) {
ex.printStackTrace();
}
}
i++;
notifyAll();
}
public static void main(String [] args){
Thread st=new Thread(new Number10());
st.setName("st");
Thread windows=new Thread(new Number10());
windows.setName("windows");
st.start();
windows.start();
}
}
1,实现数字在0到10之间来回递增或者递减,到数字递增到10时,数字开始
递减到0;当数字递减到0时开始递增到10,依次循环;
2,实用同步实现
3,理解多线程的原理
程序运行后的错误:
st:2
st:3
st:4
st:5
st:6
st:7
st:8
st:9
windows:0
st:10
//程序停在这儿就不动了!!
我的问题:
1,在执行RUN之间的代码,两个线程都是从1开始,为何i的值没发生改变
2,我的错误在哪?
3,out()方法中的notifyall没有执行!!源代码如下
:
class Number10 implements Runnable{
private int i=1;
public void run(){
synchronized(this){
while(true){
if (Thread.currentThread().getName().equalsIgnoreCase("st"))
{
input();
}
else if(Thread.currentThread().getName().equalsIgnoreCase("windows"))
{
out();
}
System.out.println(Thread.currentThread().getName() + ":" +i);
}
}
}
public void out(){
if(i==0)
{
try {
wait();
}
catch (java.lang.InterruptedException ex) {
ex.printStackTrace();
}
}
i--;
//notifyAll();
}
public void input(){
if(i==10)
{
try {
wait();
}
catch (java.lang.InterruptedException ex) {
ex.printStackTrace();
}
}
i++;
notifyAll();
}
public static void main(String [] args){
Thread st=new Thread(new Number10());
st.setName("st");
Thread windows=new Thread(new Number10());
windows.setName("windows");
st.start();
windows.start();
}
}
Thread st = new Thread(tt);
st.setName("st");
Thread windows = new Thread(tt);
windows.setName("windows");
st.start();
windows.start();输出:
windows:1
windows:0
st:1
st:2
st:3
st:4
st:5
st:6
st:7
st:8
st:9
st:10
windows:9
windows:8
windows:7
windows:6
windows:5
windows:4
windows:3
windows:2
windows:1
windows:0
st:1
st:2
st:3
st:4
st:5
st:6
st:7
st:8
st:9
st:10
windows:9
windows:8
windows:7
windows:6
windows:5
windows:4
windows:3
windows:2
windows:1
windows:0