线程的创建方式(一)

    并发编程的知识体系是每个测试开发工程师都必须具备的知识体系。这是因为在测试开发的工作体系中,我们

需要去编写性能测试工具以及在服务端稳定性的体系保障下,需要使用并发编程的知识来设计我们的测试用例的场

景。在我们的智能手机以及电脑中,运行的每个应用程序我们都可以称为程序,但是在计算机的科学中我们可以把

程序=数据结构+算法,当然这部分会在后续的文章体系中会详细的介绍到。但是可以说智能手机以及电脑上运行的

程序我们都可以称呼为程序。进程是计算机运行的最小单位模式,而一般性的一个程序运行的时候都会有一个进程,

而线程是比进程更细小的一部分,可以说线程是利用进程所拥有的资源来独立的完成一项计算任务。现代的软件基本

可以说都是多线程的模式,那么多线程它是有什么优势了?它的优势具体可以汇总为如下:

  • 能够快速的得到用户的响应操作,其实这在应用层的协议角度能够很好的来理解
  • 软件在同一个时刻可以干很多的事,比如微信可以同时进行语音,视频,发文字等信息
  • 更加合理的使用计算机的系统资源,这些资源主要是CPU的资源和内存的资源
  • 任何能够很好的拆分为多个小的任务
  • 提高系统的吞吐量以及软件执行的效率

下面详细的阐述在Java的技术栈中三种创建线程的方式,来学习线程的具体应用。

一、继承Thread类创建线程

        很多时候我们更多使用的是通过继承Thread的类来创建线程,下面具体演示下这部分的应用,具体如下:

package com.example.blog;

public class ThreadStudy extends  Thread
{
	public void add(int a,int b)
	{
		System.out.println("两个数相加之和:"+(a+b));
	}

	@Override
	public void run()
	{
		add(2,3);
	}

	public static void main(String[] args)
	{
		ThreadStudy threadStudy=new ThreadStudy();
		threadStudy.start();
	}
}

二、Runnable接口创建线程

        下面我们通过继承Runnable接口的方式来实现这部分,那么具体的源码部分具体如下所示:

package com.example.blog;

public class ThreadStudy implements   Runnable
{
	public void add(int a,int b)
	{
		System.out.println("两个数相加之和:"+(a+b));
	}

	@Override
	public void run()
	{
		add(2,3);
	}

	public static void main(String[] args)
	{
		ThreadStudy threadStudy=new ThreadStudy();
		Thread thread=new Thread(threadStudy);
		thread.start();
	}
}

三、Callable接口创建线程

        除了上述两种方式外,还有第三种的方式就是接口Callable,这个接口的方式是能够返回方法的表达式

具体的值,还是以上述的代码为案例,改造后的代码方式为:

package com.example.blog;

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;

public class ThreadStudy implements Callable<Integer>
{
	public int add(int a, int b)
	{
		return a+b;
	}


	@Override
	public Integer call() throws Exception
	{
		return add(2,3);
	}

	public static void main(String[] args)
	{
		ThreadStudy threadStudy=new ThreadStudy();
		FutureTask<Integer> futureTask=new FutureTask<Integer>(threadStudy);

		Thread objThread=new Thread(futureTask);
		objThread.start();
		try{
			System.out.println("返回值的信息是:"+futureTask.get());
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}

     通过如上的三种方式,可以看到其实第三种方式虽然比较麻烦点,但是我个人还是比较喜欢第三种的模式,

主要是因为能够获取到表达式的返回值的信息,拿到表达式的返回值的信息后,就可以再延伸的做其他的事宜。

 

posted @ 2022-02-28 21:54  无涯(WuYa)  阅读(70)  评论(0编辑  收藏  举报