Java中的多线程
[
]
多线程是一种Java功能,允许并发执行程序的两个或多个部分,以最大限度地利用CPU。这种程序的每个部分都称为线程。因此,线程是一个过程中的轻量级进程。
可以使用两种机制创建线程:
- 扩展Thread类
- 实现Runnable接口
- 通过Callable和Future创建线程
Java创建线程的方法
通过扩展Thread类创建线程
创建线程我们创建一个扩展java.lang.Thread类的类。此类重写Thread类中可用的run()方法。线程在run()方法中开始生命。我们创建了一个新类的对象,并调用start()方法来开始执行一个线程。Start()调用Thread对象上的run()方法。
// Java code for thread creation by extending // the Thread class class MultithreadingDemo extends Thread { public void run() { try { // Displaying the thread that is running System.out.println ("Thread " + Thread.currentThread().getId() + " is running"); } catch (Exception e) { // Throwing an exception System.out.println ("Exception is caught"); } } } // Main Class public class Multithread { public static void main(String[] args) { int n = 8; // Number of threads for (int i=0; i<8; i++) { MultithreadingDemo object = new MultithreadingDemo(); object.start(); } } }
输出:
Thread 8 is running Thread 9 is running Thread 10 is running Thread 11 is running Thread 12 is running Thread 13 is running Thread 14 is running Thread 15 is running
通过实现Runnable接口创建线程
创建线程我们创建了一个新类,它实现了java.lang.Runnable接口并覆盖了run()方法。然后我们实例化一个Thread对象并在该对象上调用start()方法。
// Java code for thread creation by implementing // the Runnable Interface class MultithreadingDemo implements Runnable { public void run() { try { // Displaying the thread that is running System.out.println ("Thread " + Thread.currentThread().getId() + " is running"); } catch (Exception e) { // Throwing an exception System.out.println ("Exception is caught"); } } } // Main Class class Multithread { public static void main(String[] args) { int n = 8; // Number of threads for (int i=0; i<8; i++) { Thread object = new Thread(new MultithreadingDemo()); object.start(); } } }
输出:
Thread 8 is running Thread 9 is running Thread 10 is running Thread 11 is running Thread 12 is running Thread 13 is running Thread 14 is running Thread 15 is running
线程类与Runnable接口
1.如果我们扩展Thread类,我们的类不能扩展任何其他类,因为Java不支持多重继承。但是,如果我们实现Runnable接口,我们的类仍然可以扩展其他基类。
2.我们可以通过扩展Thread类来实现线程的基本功能,因为它提供了一些内置的方法,如yield(),interrupt()等在Runnable接口中不可用。
Java多线程的相关章节
- Java中, 线程的生命周期和状态
- Java中的主线程
- Java的并发 – yield(),sleep()和join()方法
- Java中的线程间通信
- Java中的线程,Java.lang.Thread类
- 在Java中,start()函数在多线程中做了什么?
- 在Java多线程中,Java线程的优先级
- 在Java多线程中,java.lang.Thread类的join()方法
- 在Java中命名线程并获取当前线程的名称
- 在Java中多线程的同步
- 在Java中的方法同步和语句同步(块同步)
- 使用Java中的线程的生产者 – 消费者解决方案
- Java中的线程池
- Java中的信号量Semaphore
- Java中的Java.util.concurrent.Semaphore类
- Java中的CountDownLatch
- Java多线程中的死锁
- Java中的守护程序线程Daemon
- Java中的Java.util.concurrent.CyclicBarrier
- Java中的Callable和Future
- Java中的JVM Shutdown Hook
- Java中的Java.lang.Runtime类