专栏首页Java患者Java基础知识(十)--多线程

Java基础知识(十)--多线程

什么是线程

  • 线程是程序执行的一条路径,一个进程中可以包含多条线程
  • 多线程并发执行可以提高程序的效率,可以同时完成多项工作

多线程并行和并发的区别

  • 并行就是两个任务同时进行,需要多核CPU
  • 并发是指两个任务都请求运行,而处理器只能接受一个任务,就把这两个任务安排轮流进行,由于时间间隔较短,使人感觉两个任务都在运行.

java程序运行原理和jvm的启动是多线程的吗

  • java程序运行原理
    • java命令会启动java虚拟机,启动jvm,等于启动了一个应用程序,也就是启动过来一个进程,该进程会自动启动一个"主线程",然后主线程去调用某个类的main方法
  • jvm的启动是多线程的吗
    • jvm启动至少启动了垃圾回收线程和主线程,所以是多线程的

多线程程序实现的方式1

public class Demo2_Thread {

 /**
  * @param args
  */
 public static void main(String[] args) {
  MyThread mt = new MyThread();       //4,创建自定义类的对象
  mt.start();            //5,开启线程
  
  for(int i = 0; i < 3000; i++) {
   System.out.println("bb");
  }
 }

}
class MyThread extends Thread {         //1,定义类继承Thread
 public void run() {           //2,重写run方法
  for(int i = 0; i < 3000; i++) {       //3,将要执行的代码,写在run方法中
   System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaa");
  }
 }
}
  • 多线程程序实现方式2
public class Demo3_Runnable {
 /**
  * @param args
  */
 public static void main(String[] args) {
  MyRunnable mr = new MyRunnable();      //4,创建自定义类对象
  //Runnable target = new MyRunnable();
  Thread t = new Thread(mr);        //5,将其当作参数传递给Thread的构造函数
  t.start();            //6,开启线程
  
  for(int i = 0; i < 3000; i++) {
   System.out.println("bb");
  }
 }
}

class MyRunnable implements Runnable {       //1,自定义类实现Runnable接口
 @Override
 public void run() {           //2,重写run方法
  for(int i = 0; i < 3000; i++) {       //3,将要执行的代码,写在run方法中
   System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaa");
  }
 }
 
}

守护线程

  • setDaemon(),设置一个线程为守护线程,该线程不会单独执行,当其他非守护线程都执行结束后,自动退出

加入线程

  • join() 当前线程暂停,等待指定的线程执行结束后,当前线程再继续
  • join(int) 可以等待指定的毫秒之后继续

礼让线程

  • setPriority() 设置线程的优先级

同步代码块

什么情况下需要同步

  • 当多线程并发,有多段代码同时执行时,我们希望某一段代码执行的过程中CPU不要切换到其他线程工作,这时就需要同步

同步代码块

class Printer {
 Demo d = new Demo();
 public static void print1() {
  synchronized(d){    //锁对象可以是任意对象,但是被锁的代码需要保证是同一把锁,不能用匿名对象
   System.out.print("程");
   System.out.print("序");
   System.out.print("员");
   System.out.print("\r\n");
  }
 }

 public static void print2() { 
  synchronized(d){ 
   System.out.print("码");
   System.out.print("农");
   System.out.print("\r\n");
  }
 }
}
  • 使用synchronized关键字加上一个锁对象来定义一段代码,这就叫同步代码块

本文分享自微信公众号 - Java患者(gh_3a16ffdedb6a),作者:Zero

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-05-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java基础知识(十一)--多线程

    用户7386338
  • Java基础知识(十二)--多线程通信

    用户7386338
  • Java基础知识(十三)--线程池

    用户7386338
  • Java多线程通关———基础知识

    1 线程:进程中负责程序执行的执行单元 线程本身依靠程序进行运行 线程是程序中的顺序控制流,只能使用分配给程序的资源和环境

    后端码匠
  • JAVA多线程并发的基础知识

    并发编程是Java程序员最重要的技能之一,也是最难掌握的一种技能。它要求编程者对计算机最底层的运作原理有深刻的理解,同时要求编程者逻辑清晰、思维缜密,这样才能写...

    用户5640963
  • java基础(十一):多线程

    注意:优先级低只是意味着获得调度的概率低。并不是绝对先调用优先级高后调用优先级低的线程。

    Vincent-yuan
  • 【多线程】基础理论知识

    上一个系列是SpringCloud入门系列,以后肯定会写一期进阶系列,但是目前更新的是多线程系列。

    用户8902830
  • 【Java基本功】一文了解Java多线程的基础知识点

    本文介绍了Java多线程的基本概念,使用方法,以及底层实现原理。帮助你更好地使用Java的多线程。

    Java技术江湖
  • 多线程基础知识了解一下

    作为一名优秀的攻城师,了解多线程的知识非常有必要,尤其在人工智能和机器学习的热潮下,如何提高程序或者算法的运行效率是非常有价值的一件事情。

    我是攻城师
  • 多线程基础知识了解一下

    作为一名优秀的攻城师,了解多线程的知识非常有必要,尤其在人工智能和机器学习的热潮下,如何提高程序或者算法的运行效率是非常有价值的一件事情。

    我是攻城师
  • 多线程基础(十三):java中的FutureTask

    可以看到,FutrueTask实现了RunnableFuture接口,而RunnableFuture接口又继承了Future和Runnable。如下图:

    冬天里的懒猫
  • java基础第十六篇之多线程

    1:线程的概念 进程(任务):一个正在运行的程序 进程的调度:CPU来决定什么时候该运行哪个进程 (时间片轮流法) 线程在一个应用程序中,同时,有多个不同...

    海仔
  • Java多线程知识点

    进程和线程的区别?多线程有什么好处? 进程:正在进行中的程序(直译)。 线程:就是进程中一个负责程序执行的控制单元(执行路径)

    六月的雨
  • Java基础知识(四)--多态

    当代码这个样子的时候,(也就是说当编译类型和运行类型不同)多态就产生了.对象a具有两种类型

    用户7386338
  • Java基础——多线程

      Java中多线程的应用是非常多的,我们在Java中又该如何去创建线程呢? http://www.jianshu.com/p/40d4c7aebd66 一、...

    mukekeheart
  • Java基础——多线程

    进程(process)是计算机中已运行程序的实体。在面向线程设计的系统中,进程本身不是基本运行单位,而是线程的容器。程序本身只是指令、数据及其组织形式的描述,进...

    羊羽shine
  • Java 线程基本知识

    线程 线程和进程 进程 : 进程指正在运行的程序。确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能。 线程 ...

    李家酒馆酒保
  • 【多线程】线程池基本知识

    上篇文章讲了下线程的创建及一些常用的方法,但是在使用的时候,大多数是采用了线程池来管理线程的创建,运行,销毁等过程。本篇将着重讲线程池的基础内容,包括通过线程池...

    用户8902830
  • java多线程 基础demo

    join() 让主进程等待子进程全部执行完 例子如下: package mocker; public class TestThread5 extends Thr...

    千往

扫码关注云+社区

领取腾讯云代金券