1,进程和线程的基本概念:

1.什么是进程:
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。(百度百科)
进程其实就是我们计算机上正在运行的程序。
 
2.什么是线程:
线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
 
3.什么是多线程:
(1),概念:通俗的来说,多线程就是指多个线程并发执行的情况。
(2),原理:
多线程是如何做到的:
CPU把一段时间划分为多个很小的时间片段,然后让每个线程获得这些片段的执行权限,由于CPU的速度非常快,所以给人的感觉就像是同时运行一样。现在的计算机,的确是可以做到同时运行的,为什么呢?因为现在的计算机大多数都是多核的。
 

2、java中多线程的使用:Thread

构造:

  • new Thread()

启动一个新的线程:

  • .start()

常用方法:

  • Thread.currentThread().getName() //获取当前线程的名字
/**
* @ClassName MyThreadExample
* @projectName: object1
* @author: Zhangmingda
* @description: XXX
* date: 2021/4/19.
*/
public class MyThreadExample {
private static class MyFirstThread extends Thread{
//自己写个线程,重写run()方法
@Override
public void run() {
System.out.println("MyFirstThread运行中:名字是:" + Thread.currentThread().getName());
}
}
public static void main(String[] args) {
MyFirstThread myFirstThread = new MyFirstThread();
myFirstThread.run();//在当前线程中调用run()方法;不会产生新的线程
myFirstThread.start();
System.out.println("main方法中运行的线程名字:" + Thread.currentThread().getName());
/**
* 运行输出:
* main方法中运行的线程名字:main
* MyFirstThread运行中:名字是:Thread-0
*/
}
}
线程运行具有随机性:

可以看出每次运行顺序不一样

线程的运行具有随机性。为什么是这样?那我们来讲讲调用了start()方法之后,产生了什么:
  • (1),调用start()之后,程序会通知我们的JVM,告诉jvm我已经准备好了,可以运行了。
  • (2),Jvm异步的调用我们的线程对应的run()方法。
  • (3),Jvm什么时候运行我们的run()方法,这个是程序员没法控制的(其实呢,还是可以相对的控制,这个之后讲,但是,你要做到绝对的控制它马上运行,还是不行)
  • (4),start()方法的调用顺序,不代表线程的run()方法的运行顺序。

3、Thread实现了Runnable接口,通过实现Runnable接口的方式来实现一个线程

Thread 类实现了Runnable接口,该接口只有有一个抽象方法run()

  Thread 类构造方法可以传入一个Runnable接口实现类来构造线程实例:

示例代码:

/**
* @ClassName UseRunnableThread
* @projectName: object1
* @author: Zhangmingda
* @description: XXX
* date: 2021/4/19.
*/
public class UseRunnableThread {
private static class MyRunnableThread implements Runnable { @Override
public void run() {
System.out.println("MyRunnableThread" + Thread.currentThread().getName());
}
} public static void main(String[] args) {
Thread thread = new Thread(new MyRunnableThread());
//lambda 表达式方式构造线程方法
Thread thread1 = new Thread(()->System.out.println("Lambda表达式构建的线程,匿名内部类对象:" + Thread.currentThread().getName()) );
thread.start();
thread1.start();
System.out.println("main方法运行的线程:" + Thread.currentThread().getName());
/**
* 运行输出:
* Lambda表达式构建的线程,匿名内部类对象:Thread-1
* MyRunnableThreadThread-0
* main方法运行的线程:main
*/
}
}
 
 
 

java 多线程:Thread类;Runnable接口的更多相关文章

  1. 探Java多线程Thread类和Runnable接口之间的联系

    首先复习一下Java多线程实现机制,Java实现多线程方法有如下这么几种: 1.继承了(extends)Thread类 2.实现了(implements)Runnable接口 也就是说  有如下两种情 ...

  2. JAVA多线程Thread VS Runnable详解

    要求 必备知识 本文要求基本了解JAVA编程知识. 开发环境 windows 7/EditPlus 演示地址 源文件   进程与线程 进程是程序在处理机中的一次运行.一个进程既包括其所要执行的指令,也 ...

  3. Java多线程Thread类了解和使用

    创建线程的两种方式 extends Thread 类 public class WelComeApp { public static void main(String[] args) { Welcom ...

  4. java 多线程Thread和Runnable的区别

    如果一个类继承Thread,则不适合资源共享.但是如果实现了Runable接口的话,则很容易的实现资源共享 实现Runnable接口比继承Thread类所具有的优势:1. 适合多个相同的程序代码的线程 ...

  5. Java 多线程Thread和Runnable

    Thread: class MyThread extends Thread { private int ticketsCont=5; //一共有5张火车票 private String name; / ...

  6. Java多线程之实现Runnable接口

    package org.study2.javabase.ThreadsDemo.runnable; /** * @Auther:GongXingRui * @Date:2018/9/18 * @Des ...

  7. (CSDN迁移) JAVA多线程实现-实现Runnable接口

    实现Runnable接口  implements Runnable 重写run()方法 @Override public void run(){//TODO} 创建线程对象: Thread threa ...

  8. JAVA多线程Thread与Runnable

    一.Runnable Runnable为一个之包含一个run方法的接口 public class MyRunnable implements Runnable{ @Override //表示:预示重写 ...

  9. Java之多线程(实现Runnable接口)

    package test_demo.ThreadsDemo; public class TestRunnable { public static void main(String[] args) { ...

随机推荐

  1. Stream流的使用

    创建流 创建流的方式很多,从jdk8起,很多类中添加了一些方法来创建相应的流,比如:BufferedReader类的lines()方法:Pattern类的splitAsStream方法.但是开发中使用 ...

  2. Python之阶乘代码

    #coding=utf-8 while True:     num = int(input("请输入要阶乘的正整数数字,按负数退出:"))     jiec=1     if nu ...

  3. Linux终端使用aplay播放wav

    Linux终端使用aplay播放wav aplay是一个ALSA的声卡命令行soundfile录音机的驱动程序. 在linux下可以使用下面命令来查看用法: man aplay 所以可以使用来播放.w ...

  4. [NOI2021] 量子通信

    嗯. NOI2021最白给的一题. PS:很后悔没打同步赛,少了一张同步赛Ag 考虑加黑的256位01串,我们思考一下. 因为\(k\)小于16,所以我们直接分成16块.所以一定可以的绝对有一块是完全 ...

  5. 洛谷 P6189 - [NOI Online #1 入门组]跑步(根号分治+背包)

    题面传送门 题意: 求有多少个数列 \(x\) 满足: \(\sum x_i=n\) \(x_i\geq x_{i+1}\) 答案对 \(p\) 取模. ...你确定这叫"入门"组 ...

  6. 使用FastqCount统计fastq文件基本信息?

    目录 1. FastqCount简介 2. 使用 3. 结果 1. FastqCount简介 快速实用小工具:FastqCount https://github.com/zhimenggan/Fast ...

  7. admixture 群体结构分析

    tructure是与PCA.进化树相似的方法,就是利用分子标记的基因型信息对一组样本进行分类,分子标记可以是SNP.indel.SSR.相比于PCA,进化树,群体结构分析可明确各个群之间是否存在交流及 ...

  8. cd-hit 去除冗余序列

    最近一篇NG中使用到的软件,用来去除冗余的contigs,现简单记录. CD-HIT早先是一个蛋白聚类的软件,其主要的特定就是快!(ps:不是所有快的都是好的) 其去除冗余序列的大概思路就是: 首先对 ...

  9. 35-Remove Element

    Remove Element My Submissions QuestionEditorial Solution Total Accepted: 115367 Total Submissions: 3 ...

  10. memset初始化值的效率秒杀for循环

    <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255) ...