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();
}
}
}
}
本文介绍了Java并发编程中synchronized关键字和Lock接口的使用。通过示例展示了如何使用synchronized包裹代码块以及创建同步方法,并对比了ReentrantLock的用法,强调了它们在多线程环境中的同步作用和释放锁的机制。

被折叠的 条评论
为什么被折叠?



