首页 > 其他分享 >多线程第一章

多线程第一章

时间:2024-04-20 19:55:05浏览次数:22  
标签:Thread thread System 第一章 线程 println 多线程 public

线程的等待与唤醒

线程的join

需要在几个线程执行完毕之后再执行,例如加载资源等,join方法可以让线程顺序执行
例如

public class Example_1 {

    public static void main(String[] args) throws InterruptedException {
        Thread threadOne = new Thread(() -> {
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            System.out.println("线程1启动");
        },"thread-1");

        Thread threadTwo = new Thread(() -> System.out.println("线程2启动"),"thread -2 ");

        threadOne.start();
        threadTwo.start();

        threadOne.join();
        threadTwo.join();
        System.out.println("所有子线程执行完毕");
    }
}

join是thread类自带的方法,后续更好的CountDownLatch来使用

yeild方法

yeild方法是线程让出当前cpu的执行权,当前线程会由执行状态转换为就绪状态,cpu会从就绪的线程中选择一个线程继续执行,代码示例:

public class YieldTest implements Runnable{

    public YieldTest() {
        Thread thread = new Thread(this);
        thread.start();
    }
    @Override
    public void run() {
        for (int i = 0; i < 5; i++) {
            if (i % 5 == 0) {
                System.out.println(Thread.currentThread() + " yield cup");
            }
            Thread.yield();
        }
        System.out.println(Thread.currentThread() + " is over");
    }
}

线程的中断

线程死锁

产生的原因

如何破坏死锁

守护线程和用户线程

java中的线程主要分为守护线程和用户线程,当启动一个main函数之后就启动了一个用户线程,JVM内部也存在很多守护线程,例如GC回收线程,他们的区别就是当最后一个非守护线程退出之后,JVM会正常退出,不管守护线程是否退出

创建守护线程

public class DaemonThread {
    public static void main(String[] args) {

        Thread thread = new Thread(() -> {
           for (;;) {

           }
        });
        //设置该线程为守护线程
        thread.setDaemon(true);
        thread.start();
    }
}

ThreadLocal

ThreadLocal主要作用是创建线程本地变量,是变量在每个线程本地的一个副本

public class ThreadLocalTest {

    private static ThreadLocal<String> localVariable = new ThreadLocal<>();

    public static void main(String[] args) {
        new Thread(() -> {
            localVariable.set("thread one local variable ");
            print("threadOne");
            System.out.println("threadOne remove after" + ":" + localVariable.get());
        }).start();

        new Thread(() -> {
           localVariable.set("thread two local variable");
           print("threadTwo");
            System.out.println("threadTwo remove after" + ":" + localVariable.get());
        }).start();

    }
    
    private static void print(String str) {
        System.out.println(str + ":"+ localVariable.get());
        //清除当前线程的本地内存中的值
        localVariable.remove();
    }
}

第二节

2.1线程的并发与并行

标签:Thread,thread,System,第一章,线程,println,多线程,public
From: https://www.cnblogs.com/gushilcy/p/18148075

相关文章

  • JavaSE【9】-Java多线程
    JavaSE【9】-Java多线程synchronized修饰符(方法)------表示这个方法被同步了,就是基于线程安全的;集合容器----有一些集合容器是基于线程同步的(集合的内部使用的方法是基于synchronized来修饰的);一、线程相关概念进程和线程的概念:◆进程就是正在执行的程序,一个进程通常就是一个......
  • pytest多线程运行控制台日志输出异常
    开启多线程后控制台日志显示错误,但是日志文件输出正确百度了一个晚上也没有解决,AI也问不出来解决办法,希望有大佬看到。开启多线程运行用例单独运行只有一个线程【gw1】输出日志信息。【gw2,gw0,gw3】都不能输出日志信息通过main()方式运行,控制台日志信息乱码......
  • JTCR-多线程-09
    基于进程和线程的多任务,其最小的调度单位分别是进程和线程。在基于线程的环境中,单个进程可以同时处理不同的任务,每个线程共享地址空间。基于线程的多任务和基于进程的相比,开销小。相互间的通信和上下文切换开销不同。Java的线程模型Java的运行时系统使用多线程,当某一个线程......
  • java多线程 读取list--动态读取list
    java多线程读取list--动态读取list的案例 本次介绍,我使用的是synchronized同步代码块的关键字来读取list,在写java多线程时,一定要注意synchronized关键字的有效范围。ps:如果synchronized关键字的代码块范围太大,可能会导致优先获取到cpu资源的第一个线程在满足条件的情......
  • java多线程 读取变量同步安全的案例
    本次介绍,我使用的是synchronized同步代码块的关键字来读取list,在写java多线程时,一定要注意synchronized关键字的有效范围。ps:如果synchronized关键字的代码块范围太大,可能会导致优先获取到cpu资源的第一个线程在满足条件的情况下一直无法跳循环,从而使得其他线程无法给获......
  • 01 多线程
    线程,进程,多线程继承Thread类//创建线程方式一:继承Thread类,重写run()方法,调用start开启线程线程开始不一定立即执行,由CPU调度执行packagecom.mysoft.demo01;//创建线程方式一:继承Thread类,重写run()方法,调用start开启线程//总结:注意,线程开始不一定立即执行,由CPU调度执行pub......
  • (二)ET8多线程多进程框架设计课程介绍
    ET7已经满足90%的项目需求,没必要追新,除非客户端逻辑非常耗cpu,需要网络0GC,需要多线程支持(比如帧同步需要逻辑层单独放一个线程),服务端内部消息量过大或者需要减少总内存占用,才考虑使用ET8。ET8的课程明天开始录,主要讲解ET8多线程设计的各种思考,开发过程中的各种设计的权衡,et8相比ET7......
  • netcore 并发锁 多线程中使用SemaphoreSlim
    SemaphoreSlim是一个用于同步和限制并发访问的类,和它类似的还有Semaphore,只是SemaphoreSlim更加的轻量、高效、好用。今天说说它,以及如何使用,在什么时候去使用,使用它将会带来什么优势。代码的业务是:在多线程下进行数据的统计工作,简单点的说就是累加数据。1.首先我们建立一个程......
  • 多线程整理
    一、简介    1.1、进程        当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。一个进程是由多个线程组成。    1.2、线程        线程是程序中的一个执行流,每个线程都有自己的专有寄......
  • 第一章 人工神经网络基础
    1.1人工智能与传统机器学习学习心得:传统机器学习(ML):需要专业的主题专家人工提取特征,并通过一个编写良好的算法来破译给定的特征,从而判断这幅图像中的内容。输入-->人工提取特征-->特征-->具有浅层结构的分类器-->输出当存在欺骗性的图片出现时可能会失效,我们需要创建能够精细......