多线程

本文介绍了线程与进程的区别,强调了多线程在处理多任务时的优势。通过实例展示了在Java中实现多线程的两种方式:直接继承Thread类和实现Runnable接口,并解释了start()与run()方法的不同。最后讨论了在选择Thread或Runnable时的考虑因素。

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

在了解多线程的时候,有必要清楚的知道线程与进程的区别。
进程,可被看做一个程序或者一个应用。
线程,操作系统中能够进行运算调度的最小单位,负责执行当前进程中程序的执行。线程是进程的子集,一个进程可以有一个或多个线程,每条线程执行不同的任务,也可以将这个应用程序称为多线程程序;
多线程即一个程序中有多个线程在同时执行。
为什么要使用多线程?
多任务操作,不会产生混乱任务.就像取银行大厅存取钱.如果不排队都在一个窗口取,也能取,但排队在多个窗口取会不会更好呢。

如实在java中实现多线程?
一、 直接继承Thread类,如下:
1.定义一个类继承Thread类;
2.重写run方法;
3.创建子类对象,即创建线程对象;
4.调用start方法,开启线程并让线程执行,同时还会告诉JVM执行run方法;
代码如下:
package com.java.ThreadDemo;

public class ThreadDemo {
public static void main(String[] args) {
//创建自定义线程对象
myThread mt = new myThread(“新的线程!”);
//开启新线程
mt.start();
for (int i = 0; i < 100; i++) {
System.out.println(“main线程!”+i);
}
}
}
//自定义线程类
class myThread extends Thread{
//定义指定线程名称的构造方法
public myThread(String name){
//调用父类的 String 参数的构造方法,指定线程的名称
super(name);
}
// 重写 run 方法,完成该线程执行的逻辑
public void run(){
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName()+":正在执行!" + i);
}
}
}
结果如下:

在Thread类中可以调用start()和run(),这两种方法有何区别?
start()方法用来启动新的线程,使该被创建的线程变为可运行状态。当调用run()方法的时候只会在原来的线程中调用,没有新的线程启动,start()方法才会启动新的线程。如果调用了Thread的run()方法,它的行为就和普通方法一样,直接运行run()方法。

二、 实现Runnable接口,如下:

  1. 定义类实现Runnable接口;
  2. 覆盖接口中的run方法;
  3. 创建Thread类的对象;
  4. 将Runnable接口的子类对象作为参数传递给Thread类的构造函数;
  5. 调用Thread类的start方法开启线程;
    整体代码如下:
    package com.java.ThreadDemo;

public class RunnableDemo {

public static void main(String[] args) {
	//创建线程执行目标类对象
    Runnable runn = new myRunnable();
  //将 Runnable 接口的子类对象作为参数传递给Thread 类的构造函数
    Thread thread = new Thread(runn);
    Thread thread2 = new Thread(runn);
    //开启线程
    thread.start();
    thread2.start();
    for (int i = 0; i < 10; i++) {
		System.out.println("main线程:正在执行!" + i);
	}
}

}

//自定义线程执行任务类
class myRunnable implements Runnable{

@Override
public void run() {
	for (int i = 0; i <10; i++) {
		System.out.println("我的线程:正在执行!"+i);
	}
}

}
结果如图:

实现Runnable的好处:

实现 Runnable 接口避免了单继承的局限性,所以较为常用。实现Runnable 接口的方式,更加的符合面向对象,线程分为两部分,一部分线程对象,一部分线程任务。继承 Thread 类,线程对象和线程任务耦合在一起。一旦创建 Thread 类的子类对象,既是线程对象,有又有线程任务。实现 runnable 接口,将线程任务单独分离出来封装成对象,类型就是 Runnable 接口类型。Runnable 接口对线程对象和线程任务进行解耦。
该使用Thread还是Runnable?
Thread和Runnable的实际是继承关系,无论是使用Thread还是Runnable都会new Thread,再执行run()方法。如果只是简单的执行一个任务,还是实现Runnable接口比较简单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值