21xrx.com
2024-12-27 21:41:49 Friday
登录
文章检索 我的文章 写文章
学习笔记
2023-06-18 17:01:02 深夜i     --     --

我最近在学习Java线程,感觉收获颇丰,于是想写一篇学习笔记来总结一下。在学习Java线程过程中,我认为有三个关键词需要掌握:线程状态、线程同步和线程池。

首先是线程状态。在Java中,线程可以有多种状态,包括新建、就绪、运行、阻塞和终止。理解这些状态对于我们编写高效的多线程程序非常重要。下面是一个简单的示例,展示了线程状态的变化。


public class ThreadDemo extends Thread {

  public void run() {

    System.out.println("Thread is running");

  }

  public static void main(String[] args) {

    ThreadDemo thread = new ThreadDemo();

    System.out.println(thread.getState()); // 输出 NEW

    thread.start();

    System.out.println(thread.getState()); // 输出 RUNNABLE

  }

}

接下来是线程同步。在多个线程同时访问共享资源时,容易出现数据不一致的问题。为了避免这种问题,我们需要使用线程同步来保证数据一致性。下面是一个简单的示例,展示了使用synchronized关键字来实现线程同步。


public class SynchronizedDemo {

  private int count = 0;

  public synchronized void increment() {

    count++;

  }

  public static void main(String[] args) throws InterruptedException {

    SynchronizedDemo demo = new SynchronizedDemo();

    Thread thread1 = new Thread(() -> {

      for (int i = 0; i < 10000; i++) {

        demo.increment();

      }

    });

    Thread thread2 = new Thread(() -> {

      for (int i = 0; i < 10000; i++) {

        demo.increment();

      }

    });

    thread1.start();

    thread2.start();

    thread1.join();

    thread2.join();

    System.out.println(demo.count); // 输出 20000

  }

}

最后是线程池。Java提供了Executors类来方便地创建线程池。使用线程池可以减少线程的创建和销毁次数,提高程序的性能。下面是一个简单的示例,展示了如何使用线程池。


public class ThreadPoolDemo {

  public static void main(String[] args) throws InterruptedException {

    ExecutorService executor = Executors.newFixedThreadPool(5);

    for (int i = 0; i < 10; i++) {

      executor.execute(() -> {

        System.out.println("Thread is running");

      });

    }

    executor.shutdown();

    executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);

  }

}

通过学习Java线程,我深深感受到了多线程编程的魅力和挑战。我相信只要继续努力,我一定能在Java多线程编程的路上越走越远。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复