java线程入门知识

时间:2022-07-12 15:33:04

为什么需要多线程?

. 模型的简化,如某些程序是由多个相对独立任务的运行:

. 图形界面的出现,输入、输出的阻塞

. 多核CPU的更好利用

. 异步行为的需要

Java多线程的特性:

. 程序的入口main本身是一个线程

. 线程是并发的,无序执行的

. 线程内部是顺序执行的

. 共享数据

Java多线程的风险:

. 安全风险:由于线程的操作顺序是不确定的,某些在单线程下能运行的程序到多线程下会出现意外的结果。

. 性能风险:服务器的吞吐量、响应性、资源消耗

Java多线程API:

Java可以通过两种形式创建线程:一、实现Runnable接口,二、继承Thread类。

  1. public class ThreadTest extends Thread {
  2. public static void main(String[] args) {
  3. ThreadTest thread = new ThreadTest();
  4. thread.start();
  5. for (int i=0; i<10; i++) {
  6. System.out.println("main:"+i);
  7. }
  8. }
  9. @Override
  10. public void run() {
  11. for (int i=0; i<10; i++) {
  12. System.out.println("thread:"+i);
  13. }
  14. }
  15. }
  1. package com.openrdp.thread.api;
  2. public class RunnableTest implements Runnable {
  3. public static void main(String[] args) {
  4. RunnableTest runnable = new RunnableTest();
  5. Thread thread = new Thread(runnable);
  6. thread.start();
  7. for (int i=0; i<10; i++) {
  8. System.out.println("main:"+i);
  9. }
  10. }
  11. @Override
  12. public void run() {
  13. for (int i=0; i<10; i++) {
  14. System.out.println("thread:"+i);
  15. }
  16. }
  17. }

Java线程池技术:

  1. package com.openrdp.thread.api;
  2. import java.util.concurrent.ExecutorService;
  3. import java.util.concurrent.Executors;
  4. public class TreadPoolTest {
  5. public static void main(String[] args) {
  6. ExecutorService threadPool = Executors.newFixedThreadPool(99);
  7. TaskThread thread1 = new TaskThread("t1");
  8. threadPool.execute(thread1);
  9. TaskThread thread2 = new TaskThread("t2");
  10. threadPool.execute(thread2);
  11. }
  12. static class TaskThread implements Runnable {
  13. String param;
  14. public TaskThread(String param) {
  15. this.param = param;
  16. }
  17. @Override
  18. public void run() {
  19. }
  20. }
  21. }