题目:
启用多个线程对共享变量进行修改,每个线程输出的i必须要以连续自然数从0自增,直到i为50
效果如图
以前我对这个题目没有什么办法,无法控制多线程输出是以连续的自然数自增,
只能控制到i自增到50,输出的i是离散的,不连续的,
①就算加volatile修饰共享变量i也是不行
②如果仅仅加了锁又导致只有一个线程直接就自增到最大值50了,
③如果加锁的时候使用了wait方法是会导致IllegalMonitorStateException异常
④终于到第四种方法时使用了synchronized修饰方法而且用wait方法时
就能做到输出连续自然数自增i了
代码如下:
package codes;
import static java.lang.System.out;
public class ShareITest implements Runnable
{
public static void main(String[] args) throws Exception
{
ShareITest sit = new ShareITest();
for(int i = 0 ; i < 100 ; i++)
{
if( i == 20 )//当i自增到20时就启动多线程
{
new Thread(sit , "Thread-1").start();
new Thread(sit , "Thread-2").start();
}
}
}
static int i = 1 ;
public synchronized void run() // synchronized关键字声明为同步方法
{
try
{
for( ; i <= 50 ; i++)
{
out.println(Thread.currentThread().getName() + "-->" + i);
wait(20);//这里使用wait方法来让其他线程去修改共享变量
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}