JAVA多线程基础及简单认识

基础概念

  • 进程:程序运行时资源分配得最小单位,一个进程内部有多个线程,共享此进程中的资源。
  • 线程:CPU调度的最小单位,它必须依赖着进程存在。
  • 并行:是指系统在同一时刻可以处理事情的能力。

当系统有一个以上CPU时,则线程的操作有可能非并发。当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行(Parallel)。

  • 并发:与单位时间无关,指一个时间段中可以处理事情的能力

当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间 段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状。.这种方式我们称之为并发(Concurrent)。

  • 并发和并行的区别:

发和并行是即相似又有区别的两个概念,并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生。在多道程序环境下,并发性是指在一段时间内宏观上有多个程序在同时运行,但在单处理机系统中,每一时刻却仅能有一道程序执行,故微观上这些程序只能是分时地交替执行。倘若在计算机系统中有多个处理机,则这些可以并发执行的程序便可被分配到多个处理机上,实现并行执行,即利用每个处理机来处理一个可并发执行的程序,这样,多个程序便可以同时执行。

  • 并发编程的好处:可以充分利用CPU的资源,提高用户体验,可以使我们的程序做到异步调用,加快响应时间。
  • 坏处:会涉及到线程之间共享资源,容易发生冲突;造成死锁;如果控制不好线程的数量,会发生死机。

Java中的线程

java本身就是多线程的,在main函数中可以发现:

public static void main(String[] args) {
        // 获取java线程的管理MXBean
        ThreadMXBean tmxb = ManagementFactory.getThreadMXBean();
        // 不需要获取同步的Monitor和synchronizer信息,仅获取线程和线程堆栈信息
        ThreadInfo[] threadInfos = tmxb.dumpAllThreads(false, false);
        // 遍历线程信息,打印出ID和名称
        for (ThreadInfo info : threadInfos) {
            System.out.println("[" + info.getThreadId() + "] " + info.getThreadName());
        }
    }

结果为:

         Attach Listener
         Signal Dispatcher
         Finalizer
         main

Java中启动新线程的三种方式

  • 继承Thread()类

    public class ***{
      public static void main(String[] args) {
          TwoThread thread = new TwoThread();
          Thread th = new Thread(thread);
          th.start();//注意是start,非run
         }
     private static class TwoThread extends Thread{
          public void run() {
           System.out.println("start new Thread two");
          }
        }
    }
  • 实现Runnable()接口

     Thread thread1 = new Thread(new Runnable() {
           public void run() {
            System.out.println("start new Thread one");
           }
          });
       thread1.start();//注意是start,非run
    
  • 实现Callable接口,允许有返回值

    private static class UseCall implements Callable<String>{
       public String call() throws Exception {
     	System.out.println("Callable syso write somethings");
       	return "start new Thread Three";
      }
    public static void main(String[] args)throws InterruptedException,
    					 ExecutionException {
          UseCall useCall = new UseCall();
          FutureTask<String> futureTask = new FutureTask<>(useCall);
          new Thread(futureTask).start();//输出为Callable syso write somethings
          System.out.println(futureTask.get());//输出为start new Thread Three
         }  
有始必有终-----线程的终止

有关线程的正常关闭及为何如此关闭,我学习到的也仅仅是stop(),resume(),suspend()已不建议使用,stop()会导致线程不会正确释放资源,suspend()容易导致死锁。更多知识请移步尊重原创,我就不复制了http://www.cnblogs.com/greta/p/5624839.html
(里面有具体代码的展示,有时间的话烦请手敲一下)
这是因为在java中,线程之间是协作式的,并非抢占式。意味着关闭线程时,interrupt() 方法仅仅会发出一个状态码(假设),将线程的中断标志位置为true,线程是否中断,由线程本身决定。
static方法interrupted() 判定当前线程是否处于中断状态,同时中断标志位改为false。方法里如果抛出InterruptedException,线程的中断标志位会被复位成false,如果确实是需要中断线程,要求我们自己在catch语句块里再次调用interrupt()。

线程常用方法和线程的状态

线程有5种状态:整个生命周期就是这几种状态的切换。run()和start() :run方法就是普通对象的普通方法
只有调用了start()后,Java才会将线程对象和操作系统中实际的线程进行映射,再来执行run方法。
yield() :让出cpu的执行权,将线程从运行转到可运行状态,但是下个时间片,该线程依然有可能被再次选中运行。
下面有个图可以参考一下:

在这里插入图片描述
同时提一下线程的优先级:取值可以为1~10,缺省为5,但是线程的优先级不可靠,并不能保证其执行先后

守护线程:和主线程共死,如果有finally的话,不能保证finally一定执行

在此我的博客第一步终于迈了出来,谢谢有缘人的观看,写的零零散散,多多体谅,我会加油的
同时感谢享学课程的老师们,因为这样排版都是参照老师们的文档写的,在此感谢!!!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值