JAVA 多线程 第一篇——实现多线程的两个方法 (小白必看)

JAVA多线程

进程和线程

进程(Process)

进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。(选自百度百科)

线程(Thread)

⚪一个进程包含多个线程,多个线程共享同一个内存地址,共享同一块资源。

JAVA实现多线程的两个方法:(继承和接口)

一、继承(extends) Thread方法

1.在类名之后使用extends关键字继承Thread类。
2.重写run()方法。
3.用start()方法启动线程。

实例1

1.在本类中实现第一步和第二步
public class MyThreadOne extends Thread{
     //1.继承Thread类
 
 //2.重写run方法
 @Override
 public void run() {
   
  // TODO 自动生成的方法存根
  /*线程体*/
  System.out.println("-----------线程中的输出");
 }
2.然后在主类中启动线程
public class TestOne {
   
 public static void main(String[] args) {
   //主线程
  //创建线程
  MyThreadOne myThread1 = new MyThreadOne();
  //启动线程
  myThread1.start();   //此时已经有两条路线了
         //start() 启动线程,java虚拟机调用线程的run方法
         //如果直接调用线程中的run方法,还是普通的调用方法,而非启动了一个新的线程。
  System.out.println("-----main方法中的输出");
 }
}

实例2

public class MyThreadTwo extends Thread{
   
 @Override
 public void run() {
   
  // TODO 自动生成的方法存根
  for (int i = 0; i < 10; i++) {
   
   System.out.println("------副线程中的for循环"+i);
  }
 }
}
public class ThesTwo {
   
 public static void main(String[] args) {
     //主线程
  //创建副线程
  MyThreadTwo myThread2 = new MyThreadTwo();
  //启动线程
  myThread2.start();
  //主线程中的for循环
  for (int i = 0; i < 10; i++) {
   
   System.out.println("主线程中的for循环------"+i);
  }
 }
}

提示:采用继承Thread方法的缺点是

JAVA每个类只能使用extend语句来继承唯一一个类
如果使用本方法,本类将不能再继承别的类。
由于JAVA可以继承多个接口,所以,我们介绍第二种方法。

二、继承(implements) Runnable接口

1.继承Runnable接口。
2.实现run()方法。
3.使用Thread类做代理。
4.Thread类的代理调用start()方法启动线程。

⚪与第一种方法不同之处在于
本方法在启动线程时不可以直接使用线程类名调用start()方法。
而是首先要新建Thread类并让其作为本接口的代理(见第二个代码实例6-7行)
然后使用代理调用start()方法。

实例1

public class MyThreadOne implements Runnable{
    //1.实现Runnable接口
	@Override
	public void run() {
          //2.实现run方法
	// TODO 自动生成的方法存根
  for (int i = 0; i < 10; i++) {
   
   System.out.println("线程1中的for循环------"+i);
  }
 }
}
public class TestOne {
   
 
 public static void main(String[] args) {
   
  //创建线程
  MyThreadOne myThread1 = new MyThreadOne();
  //启动线程
  Thread t = new Thread(myThread1); //3.调用Thread类的start方法来启动线程
  t.start();
  //主线程的循环
  for (int i = 0; i < 10; i++) {
   
   System.out.println("------主线程中的for循环"+i);
  }
 }
}
运行结果:

为什么两个线程会交叉执行呢?😀 在JAVA中多个线程都被启动同时工作时,CPU的使用权是如何分配的?每个线程的生命周期又是怎样的呢?我将在下一篇文章详细介绍o( ̄▽ ̄)ブ
全部评论

相关推荐

2024-11-18 09:44
Java
小白也想要offer:简历别放洋屁,搞不还还放错了,当然你投外企除外,以上纯属个人观点
点赞 评论 收藏
分享
断电再接线:1. 简历排版方面,你这内容比较少,一页放完。各模块之间建议用明显的分隔线分开,现在一眼看上去非常乱。教育经历留白太多。项目经历格式不统一。 2. 第一个项目,硬件设计太笼统,硬件架构规划是指板级电路设计还是FPGA逻辑设计?FPGA时序逻辑设计具体指的什么?实现的三个低速协议以及使用协议进行控制时序,是指什么? 3. 第二个项目,我觉得你可以和第一个项目整合一下,合并为一个项目。第二个项目说实话随便买个zynq开发板都有一直petalinux的教程,作为一个独立的项目不合适的,更像是一个小作业。 4. 第三个项目,项目内容这里,其实和环境搭建之类的东西提一嘴就好了,环境准备和编译安装工具链这种东西没多大必要写,实在要写的话可以 说 使用docker 独立sdk环境之类的。你说的这个工具我没用过,我用的比较多的是busybox和buildroot,是基于menuconfig进行配置的,如果scratch也是类似的模式的话,那我觉得这个项目也经不起细推。你可以往内核裁剪那方向靠,我说的这两个工具你也可以看看。 5. 你熟悉这些接口时序的话,你可以进一步去看一下驱动开发,然后面试的时候突出这个作为重点。第三个项目也可以将驱动开发给补充进去。因为单编内核和构建文件系统,其实很多时候是体力劳动。 6. 特长这里,独立成一个荣誉奖项的模块,把你获得的奖学金和竞赛奖项放一起。数模的话,写了国赛,美赛就不用写了。 7. 总的来说可以了,你简历上写的东西你只要都熟悉,找个实习还是没问题的。 8. 嵌入式分为硬件,底层软件和应用软件,看你的经历我建议你往底层靠,多去熟悉常用的通信接口,去看内核和驱动,网络编程这块也可以去了解一下。然后去**刷刷hot100
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务