首页 > 其他分享 >认识线程、创建线程写法

认识线程、创建线程写法

时间:2024-04-04 15:44:53浏览次数:25  
标签:Thread 创建 void 线程 进程 sleep 写法 1000

认识线程

1. 为什么需要线程

2. 如何理解线程

线程是进程的一部分, 一个pcb结构体描述一个线程, 多个pcb结构体对象(多个线程) 串起来等于一个进程

 

 

3. 为什么说线程比进程创建/销毁开销小 ?

 

4. 进程和线程之间的区别与联系

1. 进程包含线程! 一个进程里面可以有一个线程,也可以有多个线程。

2. 进程在频繁创建和销毁中,开销更高. 而只有第一次创建线程(进程), 才会申请资源, 之后创建线程都不会在申请资源, 因为线程之间资源共享

3. 进程是系统分配资源(内存,文件资源....) 的基本单位。线程是系统调度执行的基本单位(CPU)

4. 进程之间是相互独立的, 一个进程挂了其他进程一般都没事. 但是, 在一个进程内部的多个线程之间, 一个线程挂了,整个进程都挂了

 

5. 创建线程的写法

1. 创建thread子类, 重写run()方法

查看代码
 class MyThread extends Thread {
    @Override
    public void run() {
        // 这里写的代码, 就是该线程要完成的工作
        while (true) {
            System.out.println("hello thread");
            // 让线程主动进入"堵塞状态", 短时间停止去cpu上执行
            // 单位 1000 ms (毫秒) => 1 s (秒)
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

class Test {
    public static void main(String[] args) {
        // Thread 类表示线程
        Thread t = new MyThread();
        t.start(); // 创建线程, 在线程中调用run()

        while (true) {
            System.out.println("hello main");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

 

 

2. 通过Runable接口

查看代码
 class MyRunnable implements  Runnable {
    @Override
    public void run() {
        while (true) {
            System.out.println("hello thread");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

class Test {
    public static void main(String[] args) {
        Thread t = new Thread(new MyRunnable());
        t.start();

        while (true) {
            System.out.println("hello main");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

 两种写法的区别

 

3. 匿名内部类方式

本质上和方法一是一样的

class test {
    public static void main(String[] args) {
        Thread t = new Thread() {
            @Override
            public void run() {
                while (true) {
                    System.out.println("hello thread");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };
        t.start();

        while (true) {
            System.out.println("hello main");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

 

标签:Thread,创建,void,线程,进程,sleep,写法,1000
From: https://www.cnblogs.com/xumu7/p/18113937

相关文章

  • QT创建工程
    step1:step2:step3:step4:step5:出现了文件显示不全的问题:解决方法:......
  • 在Linux中,进程和线程有何作用?
    在Linux操作系统中,进程和线程都扮演着关键角色,它们的设计目的是为了支持系统的并发性和资源共享,以及提高应用程序的性能和响应能力。进程的作用:资源隔离:进程是操作系统分配资源的基本单位,每个进程都有自己独立的地址空间,包括代码段、数据段、堆和栈,这样可以防止一个进程错误......
  • 在Linux中, 如何创建一个新用户和新组?
    在Linux中,创建新用户和新组的过程相对直接,主要通过命令行界面(CLI)完成。下面将详细解释如何执行这些操作:1.创建新用户在Linux中,可以使用useradd命令来创建新用户。该命令的基本语法是:useradd[选项]用户名其中,[选项]是可选的,用于指定用户的各种属性。一些常用的选项包括:-m......
  • 由于JavaScript有两种方式两种写法Creating a regular expression,在线测试网站https:/
    constre=/ab+c/;constre=newRegExp("ab+c");如果要使用第二种方式需要改变flavor和delimiters  RegExp比//需要额外的一次转义可以点击CodeGenerator查看   delimiters的不同会影响所需要的转义......
  • 探索Anaconda:创建Python虚拟环境
    目录 1.创建虚拟环境2.激活虚拟环境3.退出虚拟环境:4.常用命令4.1安装(使用pip或者conda都行,下面展示conda)4.2查看已安装的包4.3更新包4.4删除虚拟环境 1.创建虚拟环境打开AnacondaPrompt(或者终端),使用以下命令创建一个名为myenv的Python虚拟环境:conda......
  • 使用vscode创建c++项目
    Vscode创建c++项目1.初始化并配置C++项目目标:创建C++文件,并自动生成tasks.json和launch.json,能够支持单文件和多文件的编译和调试步骤:创建一个空文件夹,然后选择用vscode打开在文件夹里编写一个c++文件(也可以在里面再次创建一个存放c++源码的文件夹)然后选择g++编译运......
  • Linux进程创建和管理
    在Linux中,进程创建和管理的相关函数主要是fork()、exec()、wait()和exit() 举个例子:#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<sys/wait.h>intmain(){pid_tpid;//创建子进程pid=fork();if(pid<0){......
  • 多线程常用函数
    在Linux多线程编程中,有一些常用的函数和相关概念。这里做个记录方便查找:pthread_create:创建线程。该函数的原型为intpthread_create(pthread_t*thread,constpthread_attr_t*attr,void*(*start_routine)(void*),void*arg),其中thread是用于存储新线程标识符......
  • 多线程(2)-线程同步互斥锁Mutex
    在Linux多线程编程中,互斥锁(Mutex)是一种常用的同步机制,用于保护共享资源,防止多个线程同时访问导致的竞争条件。在POSIX线程库中,互斥锁通常通过pthread_mutex_t类型表示,相关的函数包括pthread_mutex_init、pthread_mutex_lock、pthread_mutex_unlock等。 下面为一个demo,......
  • 多线程(2)-线程同步条件变量
    在Linux多线程编程中,条件变量是一种用于线程间同步的重要机制。它通常与互斥锁结合使用,用于解决多个线程竞争共享资源的问题。条件变量允许一个线程在等待某个条件变为真时阻塞,并且在另一个线程改变条件并通知时恢复执行。这个玩意跟内核等待队列差不多意思。 在Linux多线......