理解有误:Java多线程同步问题示例

原创 旧城等待, 2024-09-17 16:39 143阅读 0赞

在Java中,多线程的同步问题是常见的并发挑战。以下是一个简单的示例来解释这些同步问题:

  1. 互斥锁

    1. // 示例代码:两个线程交替打印数字
    2. class Counter {
    3. private int count = 0;
    4. Lock lock = new ReentrantLock();
    5. public synchronized void increment() {
    6. count++;
    7. lock.unlock(); // 在释放锁之前更新了计数器
    8. lock.lock(); // 然后再次锁定,以防止其他线程在此期间访问
    9. }
    10. public synchronized int getCount() {
    11. return count;
    12. }
    13. }
  2. 条件变量

    1. class PrintNumber extends Thread {
    2. private Counter counter;
    3. boolean printFlag = false;
    4. PrintNumber(Counter c) {
    5. this.counter = c;
    6. }
    7. @Override
    8. public void run() {
    9. while (true) { // 无限循环,直到中断
    10. if (printFlag) { // 等待条件满足(打印数字)
    11. counter.increment();
    12. printFlag = false; // 调整标志位,不再等待
    13. } else { // 如果不需要打印,则等待
    14. try {
    15. wait(); // 调用wait()方法,进入等待状态
    16. } catch (InterruptedException e) {
    17. // 处理中断异常
    18. }
    19. }
    20. }}
    21. }
    22. }
  3. synchronized块/方法

    1. class WorkerThread extends Thread {
    2. private Counter counter;
    3. WorkerThread(Counter c) {
    4. this.counter = c;
    5. }
    6. @Override
    7. public void run() {
    8. for (int i = 0; i < 10; i++) { // 每次循环,都会尝试增加计数器
    9. if (counter.getCount() == 5) { // 当计数器达到5时,会打印数字并继续循环
    10. System.out.println("Number printed: " + i);
    11. counter.increment(); // 增加计数器,为下次条件满足做准备
    12. break; // 跳出当前循环
    13. }
    14. }
    15. }
    16. }

    通过这些示例,可以理解Java多线程同步问题的处理方式和常见解决方案。

文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。

发表评论

表情:
评论列表 (有 0 条评论,143人围观)

还没有评论,来说两句吧...

相关阅读