Java中的多线程

作者: Arvin Chen 分类: Java 来源: Break易站(www.breakyizhan.com)

多线程是一种Java功能,允许并发执行程序的两个或多个部分,以最大限度地利用CPU。这种程序的每个部分都称为线程。因此,线程是一个过程中的轻量级进程。

可以使用两种机制创建线程:

  1. 扩展Thread类
  2. 实现Runnable接口
  3. 通过Callable和Future创建线程

通过扩展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中的多线程 - Break易站
    转载请保留页面地址:https://www.breakyizhan.com/java/4932.html

    "Java中的多线程"的笔记

    • Arvin Chen

      2019年2月19日 下午11:17

      通过Callable和Future创建线程

      (1)创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,并且有返回值。

      (2)创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值。

      (3)使用FutureTask对象作为Thread对象的target创建并启动新线程。

      (4)调用FutureTask对象的get()方法来获得子线程执行结束后的返回值

      package com.thread;
       
      import java.util.concurrent.Callable;
      import java.util.concurrent.ExecutionException;
      import java.util.concurrent.FutureTask;
       
      public class CallableThreadTest implements Callable<Integer>
      {
       
      	public static void main(String[] args)
      	{
      		CallableThreadTest ctt = new CallableThreadTest();
      		FutureTask<Integer> ft = new FutureTask<>(ctt);
      		for(int i = 0;i < 100;i++)
      		{
      			System.out.println(Thread.currentThread().getName()+" 的循环变量i的值"+i);
      			if(i==20)
      			{
      				new Thread(ft,"有返回值的线程").start();
      			}
      		}
      		try
      		{
      			System.out.println("子线程的返回值:"+ft.get());
      		} catch (InterruptedException e)
      		{
      			e.printStackTrace();
      		} catch (ExecutionException e)
      		{
      			e.printStackTrace();
      		}
       
      	}
       
      	@Override
      	public Integer call() throws Exception
      	{
      		int i = 0;
      		for(;i<100;i++)
      		{
      			System.out.println(Thread.currentThread().getName()+" "+i);
      		}
      		return i;
      	}
       
      }
      
    扫描二维码添加微信 
  • ,领取淘宝优惠券,淘宝购物更优惠。现在添加微信,还可以领取机械键盘优惠券!添加微信后,分享淘宝选中的机械键盘给淘宝机器人即可领取!
    支持我们,就用微信淘宝!

    发表笔记

    电子邮件地址不会被公开。 必填项已用*标注

    更多阅读