📄 ex.java
字号:
public class Ex
{
public static void main(String[] args)
{
// new Test().start();
// new Test().start();
Test t = new Test();
new Thread(t).start();
/*这里如果不使用sleep方法,则在第一个线程起动后,main线程还是会继续执行,这样flag就会被设置为true,
这样只会执行flag为true时的线程,而为false时的代码将不会被执行*/
try {
Thread.sleep(30);
}
catch (Exception ex) {
ex.printStackTrace();
}
t.flag=true;
new Thread(t).start();
// new Thread(t).start();
// new Thread(t).start();
}
}
class Test implements Runnable// extends Thread
{
int count=50;
boolean flag=false;
Object obj = new Object();
public void run()
{
if(flag==false)
{
while(true)
go();
}
else
{
while(true)
{
synchronized(this)//这里换成obj就会出现0票现象
{
if(count>0)
{
try {
Thread.sleep(30);
}
catch (Exception ex) {
ex.printStackTrace();
}
System.out.println("obj剩余票数"+count--);
}
}
// go();
}
}
}
public synchronized void go()
{
if(count>0)
{
try {
Thread.sleep(30);
}
catch (Exception ex) {
ex.printStackTrace();
}
System.out.println("this剩余票数"+count--);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -