第四篇:多线程技术

本文详细介绍了进程与线程的概念,对比了两者的区别,并深入探讨了多线程的优缺点。此外,还提供了两种创建线程的方法:一是通过继承Thread类;二是实现Runnable接口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.线程与进程

进程:正在进行中的程序(直译)。

线程:就是进程中一个负责程序执行的控制单元(执行路径),

一个进程中可以多执行路径,称之为多线程。

一个进程中至少要有一个线程。

开启多个线程是为了同时运行多部分代码。

每一个线程都有自己运行的内容。这个内容可以称为线程要执行的任务。

多线程好处:解决了多部分同时运行的问题。

多线程的弊端:线程太多回到效率的降低。

其实应用程序的执行都是cpu在做着快速的切换完成的,这个切换是随机的。

JVM启动时就启动了多个线程,至少有两个线程可以分析的出来。

1,执行main函数的线程,该线程的任务代码都定义在main函数中。

2,负责垃圾回收的线程。

2.创建线程方法之一即继承thread类

步骤:

1,定义一个类继承Thread类。

2,覆盖Thread类中的run方法。

3,直接创建Thread的子类对象创建线程。

4,调用start方法开启线程并调用线程的任务run方法执行。

 可以通过Thread的getName获取线程的名称 Thread-编号(从0开始)

 主线程的名字就是main。

Demo
 1 class Demo extends Thread 
 2 { 
 3  private String name; 
 4  Demo(String name) 
 5  { 
 6   super(name); 
 7   //this.name = name; 
 8  } 
 9  public void run() 
10  { 
11   for(int x=0; x<10; x++) 
12   { 
13    //for(int y=-9999999; y<999999999; y++){} 
14    System.out.println(name+"....x="+x+".....name="+Thread.currentThread().getName()); 
15   } 
16  } 
17 } 
18  
19 class ThreadDemo2  
20 { 
21  public static void main(String[] args)  
22  { 
23  
24   /* 
25   创建线程的目的是为了开启一条执行路径,去运行指定的代码和其他代码实现同时运行。 
26    
27   而运行的指定代码就是这个执行路径的任务。 
28  
29   jvm创建的主线程的任务都定义在了主函数中。 
30  
31   而自定义的线程它的任务在哪儿呢? 
32   Thread类用于描述线程,线程是需要任务的。所以Thread类也对任务的描述。 
33   这个任务就通过Thread类中的run方法来体现。也就是说,run方法就是封装自定义线程运行任务的  函数。 
34    
35   run方法中定义就是线程要运行的任务代码。 
36  
37   开启线程是为了运行指定代码,所以只有继承Thread类,并复写run方法。 
38   将运行的代码定义在run方法中即可。  
39   */ 
40 // 
41 //  Thread t1 = new Thread(); 
42  
43   Demo d1 = new Demo("旺财"); 
44   Demo d2 = new Demo("xiaoqiang"); 
45   d1.start();//开启线程,调用run方法。 
46    
47   d2.start(); 
48   System.out.println("over...."+Thread.currentThread().getName()); 
49  } 
50 } 

3.创建线程方法之二即实现Runnable接口

1,定义类实现Runnable接口。

2,覆盖接口中的run方法,将线程的任务代码封装到run方法中。

3,通过Thread类创建线程对象,并将Runnable接口的子类对象作为Thread类的构造函数的参数进行传递。

 为什么?因为线程的任务都封装在Runnable接口子类对象的run方法中。

 所以要在线程对象创建时就必须明确要运行的任务。

4,调用线程对象的start方法开启线程。

 实现Runnable接口的好处:

1,将线程的任务从线程的子类中分离出来,进行了单独的封装。

 按照面向对象的思想将任务的封装成对象。

2,避免了java单继承的局限性。

所以,创建线程的第二种方式较为常用。

demo
 1 class Demo implements Runnable//extends Fu //准备扩展Demo类的功能,让其中的内容可以作为线程的任务执行。 
 2      //通过接口的形式完成。 
 3 { 
 4  public void run() 
 5  { 
 6   show(); 
 7  } 
 8  public void show() 
 9  { 
10   for(int x=0; x<20; x++) 
11   { 
12    System.out.println(Thread.currentThread().getName()+"....."+x); 
13   } 
14  } 
15 } 
16  
17 class  ThreadDemo 
18 { 
19  public static void main(String[] args)  
20  {  
21   Demo d = new Demo(); 
22   Thread t1 = new Thread(d); 
23   Thread t2 = new Thread(d); 
24   t1.start(); 
25   t2.start(); 
26  
27 //  Demo d1 = new Demo(); 
28 //  Demo d2 = new Demo(); 
29 //  d1.start(); 
30 //  d2.start(); 
31  } 
32 } 

 

 

转载于:https://www.cnblogs.com/gaodao/archive/2013/02/22/2921837.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值