多线程两种实现方式

一 概念
线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。
简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程
什么是多线程呢?即就是一个程序中有多个线程在同时执行。

通过下图来区别单线程程序与多线程程序的不同:

  1. 单线程程序:即,若有多个任务只能依次执行。当上一个任务执行结束后,下一个任务开始执行。如,去网吧上网,网吧只能让一个人上网,当这个人下机后,下一个人才能上网。

  2. 多线程程序:即,若有多个任务可以同时执行。如,去网吧上网,网吧能够让多个人同时上网。
    在这里插入图片描述
    二 定义线程
    1 扩展java.lang.Thread类以及实现java.lang.Runnable接口。
      此类中有run()方法,public void run(),如果该线程是独立的Runnable运行对象构造的,则调用该Runnable对象的run()方法;否则,该方法不执行任何操作。Thread的子类也应该重写该方法。
    三 实例化线程
    1 如果是扩展了java.lang.Thread类的线程,则直接调用new即可。
    2 如果是实现了jav.lang.Runnable接口的类,则调用Thread的构造方法:
      Thread(Runnable target)
      Thread(Runnable target,String name)
      Thread(ThreadGroup group, Runnable target)
      Thread(ThreadGroup group, Runnable target, String name)
      Thread(ThreadGroup group, Runnable target, String name, long stackSize)
    四 启动线程
      在线程的Thread对象上调用start()方法,而不是run()或别的方法。
      在调用start()方法之前,线程处于新状态中,新状态有一个Thread对象,但没有一个真正的线程。
      在调用start()方法之后,发生了一系列复杂的事情:  
        启动新的执行线程(具有新的调用栈);
        该线程从新状态转移到可运行状态;
        当该线程获得执行机会时,其目标run()方法将运行。
    五 创建线程方式一继承Thread类
    创建线程的步骤:
    1 定义一个类继承Thread。
    2 重写run方法。
    3 创建子类对象,就是创建线程对象。
    4 调用start方法,开启线程并让线程执行,同时还会告诉jvm去调用run方法。
    测试类

    public class Demo01 {
    public static void main(String[] args) {
    	//创建自定义线程对象
    	MyThread mt = new MyThread("新的线程!");
    	//开启新线程
    	mt.start();
    	//在主方法中执行for循环
    	for (int i = 0; i < 10; i++) {
    		System.out.println("main线程!"+i);
    	}
    }
    }
    

自定义线程类

public class MyThread extends Thread {
//定义指定线程名称的构造方法
public MyThread(String name) {
	//调用父类的String参数的构造方法,指定线程的名称
	super(name);
}
/**
 * 重写run方法,完成该线程执行的逻辑
 */
@Override
public void run() {
	for (int i = 0; i < 10; i++) {
		System.out.println(getName()+":正在执行!"+i);
	}
}
}

六 创建线程方式—实现Runnable接口
创建线程的步骤。
1、定义类实现Runnable接口。
2、覆盖接口中的run方法。。
3、创建Thread类的对象
4、将Runnable接口的子类对象作为参数传递给Thread类的构造函数。
5、调用Thread类的start方法开启线程。
测试类

public class Demo02 {
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);
		}
	}
}

自定义线程执行任务类

public class MyRunnable implements Runnable{
//定义线程要执行的run方法逻辑
@Override
public void run() {
	for (int i = 0; i < 10; i++) {
		System.out.println("我的线程:正在执行!"+i);
	}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值