1.使用synchroized把代码包起来
例:
class duoxian extends Thread
{
private static int tickiet=100;
static Object obj=new Object();
@Override
public void run() {
while (true) {
synchronized (obj) {//但是需要在synchronized里面填对象静态是类.class非静态是自己建立
if (tickiet > 0) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ":" + tickiet);
tickiet--;
} else {
break;
}
}
2.synchronized建立方法体
class thread implements Runnable{
private static int tickiet=100;
@Override
public void run() {
while (tickiet >0) {
show();
}
}
private static synchronized void show() {
if (tickiet > 0) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ":" + tickiet);
tickiet--;
}
}
}
3.使用lock锁锁住代码再解锁`
class thred implements Runnable{
int tickiets=100;
private ReentrantLock lock=new ReentrantLock();
@Override
public void run() {
while (true){
try {
lock.lock();
if(tickiets>0){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+":"+tickiets);
tickiets--;
}
else
break;
} finally {
lock.unlock();
}
}
}
}