多线程的初步理解

        1.背景

           作为CS党,每当我们学习到一个新的专业名词或术语的时候,总是会想一想,为什么要出现这种东西,以及从历史观的层面去思考会让我们收获裨益。同样的,这次讲的多线程也可以进行这样的思考。多线程,本质上是为了提高效率。生活中,这样的例子比比皆是,例如在一条有着收费站的高速公路上,面对每天成千上万的汽车流量,倘若只设置一条收费闸,未免会变得手忙脚乱且效率低下。这时,我们将在这条高速公路上在多添加几个收费站,减缓单条收费的压力,这效率就立马上来了。再讲个更贴切于CS的例子:一个大公司,接到一个项目,项目被分解为各个任务(需求分析、算法设计、代码实现等等),这其中,整个项目我们可以当作是一个进程,而在改进程中具体被分配下来的各项任务可以相对于是线程(它们在同时进行,暂时忽略先后关系)。讲到这,线程的初步感性认知便出现了:一个任务,被分配为几个小任务点同时进行,而这些任务点便是线程,任务就是进程。

          2.严谨定义

             聊完背景,可以正式说明其在CS中的定义了:线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位,而多线程就是指从软件或者硬件上实现多个线程并发执行的技术,具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。

            3.在Java中的线程实现方法

                (1)继承Thread类

                         线程的启动实现离不开Thread类的功劳,Thread英文意思是“线”的意思,让其作为线程功能的类,再合适不过。在Java中,Thread被默认已被导包,因此已经不需要我们显示导包了。简单来说,通过自定义一个类,继承Thread类,再重写其run方法,

然后在main方法中创建一个实例对象,调用start方法启动线程即可。注意:不是调用run方法,而是start方法(倘若是run,则依然会像普通调用一样顺序执行)

                          代码例子:

                            

public class TestThread1 extends Thread {
	
	  //重写run方法
	  public void run() {
		  
		    for(int i=0;i<200;i++) {
		    	
		    System.out.println("我是run线程,我在创建第"+i+"各线程");
		    }
		  
		  
	  }

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		  TestThread1 test=new TestThread1();//创建实例对象
		 test.start();
		  
		  
		  for(int i=0;i<200;i++) {
			  
			  System.out.println("我是主线程main,我在创建第"+i+"个进程");
		  }

	}

}

                          

                (2)实现Runnable接口

                        通过构造类实现Runnable接口,覆写run方法,再创建一个实例对象,将其作为参数抛入到Thread类的构造器中。

                        代码实现:

                         

public class ThreadDemo2 implements Runnable{

                 public void run(){



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

                           System.out.println("我是run线程,我在创建第"+i+"个线程");

}

                
 

  public static void main(String[] args){

                 ThreadDemo2 test=new ThreadDemo2();
                 new Thread(test).start();//将类对象作为参数抛入Thread构造器
                 

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

                      System.out.println("我是主线程,我在创建第"+i+"个线程");
}

 
}


}

                (3)实现Callable接口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蜗牛变涡流

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值