java 多线程循环输出ABC

本文探讨了并发控制和线程同步技术,通过使用对象锁和资源对象锁,实现多线程环境下数据的安全更新。重点介绍了ReentrantLock的使用方法及与synchronized关键字的区别,同时阐述了线程之间的唤醒和挂起机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一:使用对象lock和unlock控制输出:

import java.util.concurrent.locks.Lock;

import java.util.concurrent.locks.ReentrantLock;

public class ABC {
private static int state = 0;

public static void main(String[] args) {
final Lock l = new ReentrantLock();

Thread A = new Thread(new Runnable(){
@Override
public void run() {
while (state<=30) {
l.lock();
if(state%3==0){
System.out.println("A");
state ++;
}
l.unlock();
}
}
});
Thread B = new Thread(new Runnable(){
@Override
public void run() {
while (state<=30) {
l.lock();
if(state%3==1){
System.out.println("B");
state ++;
}
l.unlock();
}
}
});
Thread C = new Thread(new Runnable(){
@Override
public void run() {
while (state<=30) {
l.lock();
if(state%3==2){
System.out.println("C");
state ++;
}
l.unlock();
}
}
});
A.start();
B.start();
C.start();
}

}


第二:用synchronized对该资源对象上锁,用notify唤醒占用该资源的线程,用wait()挂起占用该资源的线程



public class TestThread {
public static void main(String[] args) {
String stra = "A";
String strb = "B";
String strc = "C";

TestABC t= new TestABC();

new Thread(){
public void run(){
t.outABC(stra, strb);
}
}.start();

try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

new Thread(){
public void run(){
t.outABC(strb, strc);
}
}.start();

new Thread(){
public void run(){
t.outABC(strc, stra);
}
}.start();
}
}

class TestABC{

public void outABC(String str1,String str2){
while(true){
synchronized (str1) {
System.out.println(str1);
synchronized (str2) {
str2.notify();
}
try{
str1.wait();
Thread.sleep(100);
}catch(Exception e){
System.out.println(e);
}
}
}
}
}


总结:最重要的是明白锁的是什么,不是线程,是资源对象。唤醒的挂起的锁死的都是一个共享资源上的线程,并不能对创建的线程对象进行操作。(迄今。个人理解)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值