首页 > 系统相关 >进程与线程基础

进程与线程基础

时间:2022-08-31 20:56:20浏览次数:52  
标签:Thread 基础 System println 线程 进程 public

1.一个进程可以理解为一个应用程序,一个进程通常包括多个线程。进程可以理解为一个公司,线程理解为公司的员工。

2.进程A与进程B之间内存独立不共享线程A与线程B之间堆与方法区内存共享,但是栈是独立的,一个线程拥有一个栈!!!

3.单核cpu不能实现真正的多线程并发,但是可以“模拟多线程并发”,例如它可以使多个线程来回切换,这样一来给人的感觉像是并发的。

4.start方法会启动另一个分支线程,而run方法不会。

两种方式:

package com.javastudy.example11;
/*
1.一个进程可以理解为一个应用程序,一个进程通常包括多个线程。
进程可以理解为一个公司,线程理解为公司的员工:
2.进程A与进程B之间内存独立不共享
线程A与线程B之间堆与方法区内存共享,但是栈是独立的,一个线程拥有一个栈!!!
3.单核cpu不能实现真正的多线程并发,但是可以“模拟多线程并发”,例如它可以使多个线程来回切换,
这样一来给人的感觉像是并发的。
4.start方法会启动另一个分支线程,而run方法不会。
 */
public class Thread01 extends Thread{
    public static void main(String[] args) {
        //主线程
        //方法一(继承Thread)
        MyThread thread = new MyThread();

        //启动另一个线程
        thread.start();
        for(int i=0;i<100;i++){
            System.out.println("线程一执行"+i);
        }
        //方法二(实现Runable接口)
        System.out.println("======方法二=============");
        MyRun myrun=new MyRun();
        Thread t=new Thread(myrun);
        t.start();
        for(int i=0;i<100;i++){
            System.out.println("线程一执行"+i);
        }
    }
}
class MyThread extends Thread{
    //分支线程
public void run(){
    for(int i=0;i<100;i++){
        System.out.println("线程二执行"+i);
    }
}
}
//方法二 面向接口编程,常用
class MyRun implements Runnable{

    @Override
    public void run() {
        for(int i=0;i<100;i++){
            System.out.println("线程二执行"+i);
        }
    }
}

获取线程名字,修改名字,获取对象:

package com.javastudy.example11;

public class Thread02 {
    public static void main(String[] args) {
        Thread t=new Thread(new MyRun02());
        t.start();
        //获取名字
        System.out.println("t1线程初始名字为-------"+t.getName());
        for(int i=0;i<10;i++){

        if(i==1){
            //设置名字
            t.setName("t1线程名字已被修改");
    }
            System.out.println(t.getName()+"-----"+i);
}
        Thread t2=new Thread(new MyRun02());
        //获取名字
        System.out.println("t2线程初始名字为-------"+t2.getName());

        //获取当前对象
        System.out.println("将t2赋值为当前对象,即main");
        t2=Thread.currentThread();
        System.out.println("此时,t2线程名字为-------"+t2.getName());
        MyThread02 myt=new MyThread02();
        myt.start();
        MyThread02 myt2=new MyThread02();
        myt2.start();
    }
}
class MyRun02 implements Runnable{

    @Override
    public void run() {
        System.out.println("=================线程2启动=====================");
        System.out.println("当前线程为");
    }
}
class MyThread02 extends Thread{
    public void run(){
        Thread x1=Thread.currentThread();
        System.out.println("当前线程为"+x1.getName());
        x1.setName("change");
        System.out.println("修改后为"+x1.getName());
       /* for(int i=0;i<100;i++){
            System.out.println("当前线程对象名字为"+i);
        }*/
    }
}

线程的休眠与唤醒

package com.javastudy.example11;

public class Thread03 {
    public static void main(String[] args) {
        MyRun03 myRun03 = new MyRun03();
        Thread t=new Thread(myRun03);
        t.start();
        System.out.println("------主线程休眠3s-------");
        try {
            t.sleep(1000*3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("------主线程休眠自动结束-------");
       // System.out.println("强制分支休眠结束,通过异常机制interrupt");
      //  方式一  t.interrupt();
       // 方式二  t.stop();
        //合理方式
        myRun03.flag=false;
    }
}
class MyRun03 implements Runnable{
boolean flag=true;
    @Override
    public void run() {         //只能使用try catch,子类只能抛出更少的异常
        System.out.println("------分支线程休眠5s-------");
        if(flag){
          try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
            System.out.println("------分支线程休眠结束-------");
    }}
}

休眠-唤醒 运行截图
image

标签:Thread,基础,System,println,线程,进程,public
From: https://www.cnblogs.com/hzxiang/p/16644478.html

相关文章

  • Typora多线程批量上传图片,永久免费25G图床
    为了满足日常需求,就写了一个自动上传图片到图床的脚本运行该程序可以做到自动完成图片上传,并自动替换为网络链接,支持多图同时上传,采用了多线程,上传速度提升很明显。以Win......
  • 【CV算法基础】ASMS(adaptive scale meanshift)算法理解
        参考1. ASMS算法(adaptivescalemeanshift);2. 基于YOLOv3和ASMS的目标跟踪算法;3.github_asms;完......
  • 并发多线程8condition_variable、wait、notify_one、notify_all
    第八节condition_variable、wait、notify_one、notify_all一、条件变量condition_variable、wait、notify_one、notify_allstd::condition_variable实际上是一个类,是一个......
  • 【git基础】The TLS connection was non-properly terminated
     errorFailedtoclone'3rdparty/cutlass'.RetryscheduledCloninginto'/home/worker/shared_data/3rdparty/tvm/3rdparty/dlpack'...8ui90';/otyytuifatal:una......
  • 【CV算法基础】GIoU算法理解
    几种IoU的理解IoUIOU是用来衡量两个边界框的重叠程度的。 GIoU论文的地址为:https://arxiv.org/abs/1902.09630github代码地址:https://github.com/generalized-iou这......
  • 【ML算法基础】匈牙利算法理解
    前言匈牙利算法是一种在多项式时间内求解任务分配问题的组合优化算法,匈牙利算法(HungarianAlgorithm)与KM算法(Kuhn-MunkresAlgorithm)是做多目标跟踪的小伙伴很容易在论文......
  • 【CV算法基础】FocalLoss理解
     作者提出focalloss的出发点也是希望one-stagedetector可以达到two-stagedetector的准确率,同时不影响原有的速度。既然有了出发点,那么就要找one-stagedetector的准确......
  • c++基础思维导图2
    c++基础思维导图2结构体结构体的基本概念:用户自定义的数据类型结构体定义和使用struct结构体名{结构体成员}struct结构体名变量名;struct结构体名变量名={成......
  • 集合之Map和List线程安全问题
    一、Map常见的子类有:1、HashMap:底层数据结构是哈希表,线程不安全,允许null键和null值2、Hashtable:线程安全的,不允许null键和null值,效率低,给整个方......
  • 浅谈-java GUI-基础理论
    GUI:GraphicalUserInterface(图形用户接口)用图形的方式,用来显示计算机操作的界面Java为GUI提供的API都存在java.awt和javax.Swing两个包中java.awt包:awt是这三个......