当前位置: 首页 > news >正文

网站建设教程怎么建网站流量统计工具

网站建设教程怎么建,网站流量统计工具,好的文化网站模板下载,管理咨询公司是做什么1、知识铺垫 要想了解什么是线程#xff0c;首先要搞明白线程与进程的区别#xff0c;并行与并发的区别 1.1 线程与进程 进程#xff1a;是指⼀个内存中运⾏的应⽤程序#xff0c;每个进程都有⼀个独⽴的内存空间#xff0c;⼀个应⽤程序可以同时运⾏多个进程#xff1b…1、知识铺垫 要想了解什么是线程首先要搞明白线程与进程的区别并行与并发的区别 1.1 线程与进程 进程是指⼀个内存中运⾏的应⽤程序每个进程都有⼀个独⽴的内存空间⼀个应⽤程序可以同时运⾏多个进程进程也是程序的⼀次执⾏过程是系统运⾏程序的基本单位系统运⾏⼀个程序即是 ⼀个进程从创建、运⾏到消亡的过程。         线程线程是进程中的⼀个执⾏单元负责当前进程中程序的执⾏⼀个进程中⾄少有⼀个线程。⼀个进程中是可以有多个线程的这个应⽤程序也可以称之为多线程程序。         简⽽⾔之⼀个程序运⾏后⾄少有⼀个进程⼀个进程中可以包含多个线程 1.2 并行与并发 并发指两个或多个事件在同⼀个时间段内发⽣。 并⾏指两个或多个事件在同⼀时刻发⽣同时发⽣。 在操作系统中安装了多个程序并发指的是在⼀段时间内宏观上有多个程序同时运⾏这在单 CPU 系统中每⼀时刻只能有⼀道程序执⾏即微观上这些程序是分时的交替运⾏只不过是给⼈的感觉是同时运 ⾏那是因为分时交替运⾏的时间是⾮常短的。 ⽽在多个 CPU 系统中则这些可以并发执⾏的程序便可以分配到多个处理器上 CPU 实现多任务并⾏ 执⾏即利⽤每个处理器来处理⼀个可以并发执⾏的程序这样多个程序便可以同时执⾏。⽬前电脑市场 上说的多核 CPU 便是多核处理器核 越多并⾏处理的程序越多能⼤⼤的提⾼电脑运⾏的效率。 注意单核处理器的计算机肯定是不能并⾏的处理多个任务的只能是多个任务在单个 CPU 上并发运 ⾏。同理 , 线程也是⼀样的从宏观⻆度上理解线程是并⾏运⾏的但是从微观⻆度上分析却是串⾏ 运⾏的即⼀个线程⼀个线程的去运⾏当系统只有⼀个 CPU 时线程会以某种顺序执⾏多个线程 我们把这种情况称之为线程调度。 2、线程 2.1 创建线程的方式 继承Thread类并重写run()方法。实现Runnable接口并重写run()方法。将Runnable实例作为Thread类的构造函数参数传递并启动线程。实现Callable接口并重写call()方法。使用ExecutorService的submit()方法提交Callable任务并通过Future对象获取返回值。线程池创建 2.1.1 Runnable 和 Callable 的区别 Runnable 接口 run 方法无返回值,且无法捕获处理异常; Callable 接口 call 方法有返回值支持泛型, 可以获取异常信息 2.2 线程的状态  NEW新建 RUNNABLE运行 BLOCKED阻塞 WAITING等待 TIME_WAITING超时等待 TERMINATED 终止 2.3 线程的相关方法 线程等待wait会释放对象的锁进入waiting线程睡眠sleep不会释放当前占有的锁进入time-waiting线程让步yield与其他线程一起重新竞争CPU 时间片线程中断interrupt线程在合适的时候中断Join 等待其他线程终止则当前线程转为阻塞状态会到另一个线程结束当前线程再由阻塞状态变为就绪状态等待 cpu 的宠幸.线程唤醒notify 2.3.1 wait()和 sleep()的区别 wait()sleep()来自的类Object 类Thread 类锁的释放在等待的过程中会释放锁在等待的过程中不会释放锁使用范围必须在同步代码块中使用可以在任何地方使用 2.3.2 run()与start()方法 run() 方法是线程的执行体线程启动后会执行 run() 方法中的代码当 run() 方法执行完毕后 start() 方法用于启动一个新线程它会创建一个新的线程并在新的线程中执行 run() 方法中的代码。在调用 start() 方法的时候JVM 会为新的线程分配资源并执行该线程中的 run() 方法。 2.4 ThreadLocaltoken、localdate、traceid 线程级别的存储工具是一个线程本地变量为每一个线程都创建一个私有的变量每个线程只能获取到自己的变量从而避免了线程安全问题是一个线程级别的哈希表用于存储每个线程的变量。ThreadLocalMap 以 ThreadLocal 对象作为 key以变量值作为 value每个线程都可以通过 ThreadLocalMap 获取自己的变量 2.4.1 ThreadLocal使用场景 需要保存线程的上下文信息例如 用户信息通过token解析出来的用户id等需要对线程的局部变量进行隔离避免线程安全问题 LocalDate LocalDateTime需要在跨类跨方法使用同一个变量同时又不希望使用全局变量的情况需要避免传递参数的繁琐例如在 Spring 框架中使用的事务管理。 2.4.2 ThreadLocal注意事项 每次使用后都要使用remove()删除数据 不不然会造成内存泄露进而造成内存溢出 2.4.5 内存泄漏和内存溢出 内存泄漏对象使用之后并没有释放内存一直被占用业务代码频繁执行之后大量这样的对象不被回收造成可用的内存空间越来越少最终造成内存溢出。通俗点讲就是 不用的垃圾没有丢掉.内存溢出当创建的对象的大小大于可用的内存容量大小。 3 、多线程 3.1 多线程的基本知识 多线程是计算机多任务处理的一种方式它允许单个程序中同时运行多个任务。在多线程模型中每个线程代表执行流程中的一个独立的任务它们可以并行处理以提高效率。 在操作系统中进程是资源分配的基本单位而线程是程序执行的最小单位。一个进程可以包含多个线程每个线程执行不同的任务。多线程的出现使得程序可以同时执行多个任务例如一个文本编辑器可以在保存文件的同时继续接受用户的输入。 多线程与单线程相比最大的优势在于可以并行处理任务提高资源利用率和程序响应速度。例如一个网络服务器可以同时处理多个客户端请求而不是一次处理一个。 4、线程池 线程池ThreadPool是一种基于池化思想管理和使用线程的机制它是将多个线程预先存储在一个“池子”内当有任务出现时可以避免重新创建和销毁线程所带来性能开销只需要从“池子”内取出相应的线程执行对应的任务即可 4.1 线程池的工作原理 当一个任务提交至线程池之后 1. 线程池首先判断核心线程池里的线程是否已经满了。如果不是则创建一个新的工作线程来执行任务。否则进入 2. 2. 判断工作队列是否已经满了倘若还没有满将任务放入队列。否则进入 3. 3. 判断线程池里的线程是否都在执行任务。如果不是则创建一个新的工作线程来执行。 如果线程池满了则交给饱和策略来处理任务。 4.1.2 线程池主要优点 降低资源消耗复用线程减少线程频繁新建、销毁等带来的开销提高响应速度提高线程的可管理性 4.1.2 阿里巴巴不推荐使用JDK自带线程池的原因 同时阿里巴巴在其《Java开发手册》中也强制规定线程资源必须通过线程池提供不允许在应用中自行显式创建线程。 阿里巴巴开发手册为什么禁止使用 Executors 去创建线程池原因就是 newFixedThreadPool() 和 newSingleThreadExecutor()两个方法允许请求的最大队列长度是 Integer.MAX_VALUE 可能会出现任务堆积出现OOM。newCachedThreadPool()允许创建的线程数量为 Integer.MAX_VALUE可能会创建大量的线程导致发生OOM。它建议使用ThreadPoolExecutor方式去创建线程池通过上面的分析我们也知道了其实Executors 三种创建线程池的方式最终就是通过ThreadPoolExecutor来创建的只不过有些参数我们无法控制如果通过ThreadPoolExecutor的构造器去创建我们就可以根据实际需求控制线程池需要的任何参数避免发生OOM异常。 4.2 使用线程池-线程池的创建方式 线程池的创建方法总共有 7 种但总体来说可分为 2 类 通过 ThreadPoolExecutor 创建的线程池 通过 Executors 创建的线程池 线程池的创建方式总共包含以下 7 种其中 6 种是通过 Executors 创建的1 种是通过 ThreadPoolExecutor 创建的 Executors.newFixedThreadPool()创建一个固定大小的线程池可控制并发的线程数超出的线程会在队列中等待Executors.newCachedThreadPool()创建一个可缓存的线程池若线程数超过处理所需缓存一段时间后会回收多余的线程若线程数不够则新建线程Executors.newScheduledThreadPool()创建一个可以执行延迟任务的线程池Executors.newSingleThreadExecutor()创建单个线程数的线程池它可以保证先进先出的执行顺序Executors.newSingleThreadScheduledExecutor()创建一个单线程的可以执行延迟任务的线程池Executors.newWorkStealingPool()创建一个抢占式执行的线程池任务执行顺序不确定JDK 1.8 添加ThreadPoolExecutor最原始的创建线程池的方式它包含了 7 个参数可供设置 单线程池的意义 虽然 newSingleThreadExecutor 和 newSingleThreadScheduledExecutor 是单线程池但提供了工作队列生命周期管理工作线程维护等功能。 4.3 线程池的参数 参数代表的含义如下 corePoolSize核心线程数线程池中始终存活的线程数。maximumPoolSize最大线程数线程池中允许的最大线程数当线程池的任务队列满了之后可以创建的最大线程数。keepAliveTime最大线程数可以存活的时间当线程中没有任务执行时最大线程就会销毁一部分最终保持核心线程数量的线程。 unit单位是和参数 3 存活时间配合使用的合在一起用于设定线程的存活时间。参数 keepAliveTime 的时间单位有以下 7 种可选 TimeUnit.DAYS天TimeUnit.HOURS小时TimeUnit.MINUTES分TimeUnit.SECONDS秒TimeUnit.MILLISECONDS毫秒TimeUnit.MICROSECONDS微妙TimeUnit.NANOSECONDS纳秒 workQueue一个阻塞队列用来存储线程池等待执行的任务均为线程安全。 它一般分为直接提交队列、有界任务队列、无界任务队列、优先任务队列几种包含以下 7 种类型 ArrayBlockingQueue一个由数组结构组成的有界阻塞队列。LinkedBlockingQueue一个由链表结构组成的有界阻塞队列。SynchronousQueue一个不存储元素的阻塞队列即直接提交给线程不保持它们。PriorityBlockingQueue一个支持优先级排序的无界阻塞队列。DelayQueue一个使用优先级队列实现的无界阻塞队列只有在延迟期满时才能从中提取元素LinkedTransferQueue一个由链表结构组成的无界阻塞队列。与SynchronousQueue类似还含有非阻塞方法。LinkedBlockingDeque一个由链表结构组成的双向阻塞队列。         较常用的是 LinkedBlockingQueue 和 Synchronous线程池的排队策略与 BlockingQueue 有关 threadFactory线程工厂主要用来创建线程。 handler拒绝策略拒绝处理任务时的策略系统提供了 4 种可选 AbortPolicy中止策略默认拒绝并抛出异常。CallerRunsPolicy调用者运行策略使用当前调用的线程来执行此任务。DiscardOldestPolicy丢弃最旧任务策略抛弃队列头部最旧的一个任务并执行当前任务。DiscardPolicy丢弃策略忽略并抛弃当前任务。 4.4 线程池的状态 1. 初始状态线程池被创建时里面并没有任何线程。此时线程池的状态为初始状态。 2. 运行状态当向线程池中提交任务后线程池中的线程开始执行任务此时线程池的状态为运行状态。 3. 阻塞状态当线程池中的任务队列已满无法再接受新的任务时线程池会进入阻塞状态等待任务队列中的任务被执行完毕后再接受新的任务。 4. 关闭状态当调用线程池的shutdown()方法时线程池会进入关闭状态此时线程池不再接受新的任务但会执行任务队列中的任务。 5. 停止状态当调用线程池的shutdownNow()方法时线程池会进入停止状态此时线程池不再接受新的任务并且会中断正在执行的任务。 6. 终止状态当线程池中所有的任务都执行完毕后线程池会进入终止状态此时线程池中不再有任何线程。 4.4.1 shutdownNow与shutdown的区别 1、shutdownNow 首先将线程池的状态设置为 STOP,然后尝试停止所有的正在执行和未执行任务的线程并返回等待执行任务的列表 2、shutdown 只是将线程池的状态设置为 SHUTDOWN 状态然后中断所有没有正在执行任务的线程继续执行正在执行的任务直到任务结束. 5 、线程死锁  5.1 死锁 线程死锁是指由于两个或者多个线程互相持有对方所需要的资源导致这些线程处于等待状态无法继续执行 5.1.1 死锁的产生的条件(4者缺一不可) 互斥条件:一个资源一次只能被一个线程持有如果其他线程想要获取该资源就必须等待该线程释放该资源。保持条件:一个线程请求资源时如果已经持有了其他资源就可以保持对这些资源的控制直到满足所有资源的要求才释放不剥夺条件:已经分配的资源不能被其他线程剥夺只能由持有资源的线程释放环路等待条件:个线程形成一种循环等待的关系每个线程都在等待其他线程所持有的资源从而导致死锁的产生。 5.1.2 如何避免死锁 避免死锁 尽量避免使用多个锁减少锁的粒度:确保同步代码块的执行时间尽可能短这样可以减少线程等待时间使用尝试锁:通过 ReentrantLock.tryLock() 方法可以尝试获取锁避免嵌套锁 6、Synchronized同步锁 会使用对象的内置锁也称为监视器锁来实现同步每个对象都有一把内置锁当一个线程访问一个同步代码块时它会尝试获取这个锁如果锁被其他线程持有则该线程将被阻塞直到锁被释放 互斥性一个线程拿锁其他线程不能拿锁可重入性同一个线程可以多次获取同步锁独占性一个线程获得了对象的锁则其他线程必须等待该线程释放锁之后才能获取锁。缺点非公平锁 6.2 synchronized静态方法和非静态方法的区别 当 synchronized 修饰非静态方法时它实际上是对调用该方法的对象实例进行加锁。这意味着如果有多个线程尝试访问同一个对象实例的不同 synchronized 非静态方法它们将被串行执行因为这些线程需要获取同一个对象锁。synchronized 修饰静态方法时它锁定的是类的Class对象这意味着无论哪个线程访问该类的任何静态同步方法都需要获取这个类的锁。因此即使是不同的对象实例只要它们调用的是同一个类的静态同步方法这些调用也必须排队执行。 6.3 Synchronized与lock的区别 区别 Synchronized与lock Lockreentrantlock 类型 关键字 接口 加锁方式 隐藏的加锁 显示的加锁 作用域 作用于方法上面 只能用于方法块上面 底层 对象内置锁 AQS(AbstractQueuedSynchronizer 抽象队列同步器) 锁类型 非公平锁 可选择非公平或公平锁 6.4 锁的升级  6.4.1 基本概念 无锁 用户- 偏向锁用户 - 轻量级锁用户端 - 重量级锁 这是Java中针对synchronized锁的一种优化策略它描述了锁状态可能经历的四个阶段但并不是所有Java虚拟机都实现了这四个阶段特别是偏向锁和轻量级锁的实现可能因JVM版本而异。 对象刚创建是无锁状态当第一个线程访问同步代码块时升级为偏向锁当第二个线程进来的时候第二个线程会其实就是自旋锁等待第一个线程释放锁多线程压力比较大的时候用重量级锁互斥锁 6.4.2 锁升级过程 a. 无锁状态 对象刚创建时并没有锁的介入这时处于无锁状态。 b. 偏向锁Biased Locking 只需要用一个CAS操作和简单地判断比较就可以让一个线程持续地拥有一个锁。 c. 轻量级锁 就像偏向锁的前提是同步代码块在大多数情况下只有同一个线程访问的时候。 而轻量级锁的前提则是线程在同步代码块里面的操作非常快获取锁之后很快就结束操作然后将锁释放出来。 d. 重量级锁 相比起轻量级锁再膨胀的锁一般称之为重量级锁因为是依赖于每个对象内部都有的monitor锁来实现的而monitor又依赖于操作系统的MutexLock(互斥锁)来实现所以一般重量级锁也叫互斥锁 7、JUC包 JUC是java.util.concurrent包的简称用于处理并发编程的工具包 同步工具 CountDownLatch倒计时锁存器、CyclicBarrier循环屏障、StampedLock信号量 并发集合 CurrentHashMap、CopyOnWriteLock、BlockingQueue 原子操作(cas原理) AtomicInteger、AtomicLong 锁 synchronized、ReentrantLock重入锁、ReentrantReadWriteLock重入读写锁、StampedLock乐观读写锁
http://www.w-s-a.com/news/234659/

相关文章:

  • 一个域名可以做中英文两个网站吗搜索引擎营销的6种方式
  • 可以做ppt的网站天津网站建设怎么样
  • 网站怎么做的qq邮件订阅浙江省住房和城乡建设厅网站查询
  • 主机屋网站在线做图片
  • 河南省城乡住房建设厅网站wordpress登陆密码
  • 漳州做网站的公司搭建网站多少时间
  • 网站开发实习计划模板微营销手机
  • 网站设计与制作是做什么工作免费封面设计在线制作生成
  • 网站开发的教学课程网站广告调词软件
  • 进下加强新闻宣传网站建设入门 做网站 书籍
  • 电商网站主题photolux wordpress
  • 周口专业做网站公司深圳市宝安区松岗街道邮政编码
  • 上海企业网站推广方法网络营销策划方案框架
  • 一流的常州网站建设机械加工网报价
  • 上海响应式网站建设公司seo课程总结
  • vs网站开发教程昆山普立斯特做的有网站
  • 柳州网站seo网站swordpress 输出内容
  • 网站设计制作电话多少网站流量下降
  • 沈阳做网站推广的公司唐山哪家做网站好
  • 国外著名网站建设公司WordPress破解怎样主题修复
  • 网站建设济南云畅网络广州电力建设有限公司网站
  • 查看公司信息的网站思特奇是外包公司吗
  • 制作企业网站的目的啥都能看的浏览器
  • 做网站可以用哪些语言如何进行网站运营与规划
  • 做效果图网站有哪些电子商城网站制作数据库
  • 小刘网站建设wordpress调用php文件上传
  • 建设银行对账网站网络营销广告案例
  • 做网站开票是多少个点的票wordpress扫码提交数据库
  • 织梦网站改版需要怎么做企业网站备案管理系统
  • 大规模网站开发语言宁夏建设职业技术学院网站