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

宁夏建设工程质量安全监督总网站谷歌seo建站

宁夏建设工程质量安全监督总网站,谷歌seo建站,建立站点的基本步骤,商丘网站制作推广一、简述 线程和进程: ‌线程‌:线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。线程共享进程所拥有的全部资源。 ‌进程‌:进程是程序在执行过程中分配和管理资源的基本单位…

一、简述

线程和进程:
‌线程‌:线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。线程共享进程所拥有的全部资源。
‌进程‌:进程是程序在执行过程中分配和管理资源的基本单位,每个进程都拥有独立的地址空间和系统资源

并发与并行:
‌并发‌:在同一时间间隔内发生两个或多个事件。在Java中,并发通常是通过多线程来实现的
并行‌:在同一时刻内发生两个或多个事件。并行需要多个CPU核心或处理器来真正同时执行多个任务。

二、多线程实现方式

2.1 实现Runnable接口 

public class ThreadImpl implements Runnable{//实现run方法@Overridepublic void run() {System.out.println("线程1");}public static void main(String[] args) {//创建ThreadImpl的实例Runnable runnable = new ThreadImpl();//将实例交给线程对象(thread)处理,并开启线程new Thread(runnable).start();//也可以直接调用匿名内部类实现Runnable runnable1 = new Runnable() {@Overridepublic void run() {System.out.println("线程1");}}; //等价于  Runnable runnable2 = () -> {System.out.println("线程1")};new Thread(runnable1).start();//还可以使用lambda表达式new Thread(()-> {System.out.println("线程1");}).start();}
}

2.2 继承Thread类

public class ThreadImpl extends Thread{//重写run方法@Overridepublic void run() {System.out.println("线程1");}public static void main(String[] args) {//创建ThreadImpl的实例ThreadImpl thread = new ThreadImpl();//开启线程thread.start();}
}

2.3 实现Callable接口

Callable 接口与 Runnable 接口类似,但 Callable 接口可以返回结果,并且可以抛出异常

public class ThreadImpl implements Callable {//实现call方法@Overridepublic Object call() throws Exception {int sum = 0;for (int j = 0; j < 10 ; j++) {sum += 1;}return "计算的结果为" + sum;}public static void main(String[] args) throws ExecutionException, InterruptedException {//创建实例ThreadImpl threadCallable = new ThreadImpl();//封装//FutureTask实现了RunnableFuture接口,而RunnableFuture接口同时继承了Runnable和Future接口FutureTask<String> futureTask = new FutureTask<>(threadCallable);//启动线程new Thread(futureTask).start();//获取线程执行结果,这个方法会阻塞当前线程,直到结果可用或者抛出异常。String string = futureTask.get();System.out.println(string);}
}

三、线程安全问题

3.1 使用synchronized加锁

它能够确保在同一时间只有一个线程可以执行某个方法或代码块,从而避免多线程同时访问共享资源时可能产生的数据不一致或竞争条件问题

public class ThreadSafeImpl {private int count = 0;// 使用synchronized将访问共享资源的核心代码块加锁// 推荐使用this作为实例方法的锁对象;如果使用的是静态方法,推荐使用类名.class作为锁对象public void threadSafe() {synchronized (this) {count++;}}// 使用synchronized修饰实例方法,确保线程安全public synchronized void increment() {count++;}
}

3.2 使用 ReentrantLock锁

提供了比synchronized更丰富的功能。支持可中断的锁获取尝试、可定时的锁获取尝试、以及公平锁

public class ThreadSafeImpl {private final Lock lock = new ReentrantLock();private int count = 0;public void threadSafe2(){// 加锁lock.lock();try{count++;}catch (Exception e){e.printStackTrace();}finally {// 解锁lock.unlock();}}
}

3.3 使用并发合集ConcurrentHashMap 

ConcurrentHashMap是线程安全的,允许多个线程同时进行读写操作而不会导致数据不一致。
支持高效的并发更新操作,如put、get和remove等。

在jdk1.8之前,使用分段锁机制实现线程安全,将哈希表分成多个段(segment),每个段维护一个独立的哈希表和锁

在jdk1.8后,采用数组、单链表、红黑树的存储结构,当链表长度超过一定阈值时(默认为8),链表会转换为红黑树以提高查找效率,查询的时间复杂度从 O(n) 降低到 O(logN);
使用CAS操作和synchronized关键字来实现更细粒度的锁控制。CAS是原子操作,可以在不使用锁的情况下更新共享变量

ConcurrentHashMap的扩容触发条件:
数组中元素个数大于数组长度✖负载因子(默认0.75)
需要在短时间内插入大量元素时,使用putAll方法可能会触发扩容
链表长度过长,链表长度大于8(默认阈值)时

ConcurrentHashMap扩容流程简述:
1、计算扩容标识戳
ConcurrentHashMap允许协助扩容,这个是用来协调多个线程的扩容操作
2、初始化新数组,通常为原数组的两倍
3、设置transferIndex变量‌
transferIndex变量用于表示已经分配给扩容线程的table数组索引位置。在扩容开始前,通常被设置为原数组的长度
4、计算扩容区间
每个线程会根据transferIndex和步长(stride,通常最小值为16)来计算自己需要迁移的数组区间
5、设置ForwardingNode节点
迁移完毕后,会将旧数组中的对应位置设置为ForwardingNode节点,以告知访问此桶的其他线程该节点已经迁移完毕。
6、检查并结束扩容
最后一个结束扩容的线程会检查整个数组的数据是否都已经迁移到新数组中,并更新相关状态变量以结束扩容操作

public static void main(String[] args) {ConcurrentHashMap<String, Integer> concurrentHashMap = new ConcurrentHashMap<>();Runnable runnable = () -> {for (int i = 0; i < 10; i++) {concurrentHashMap.put("key" + i + " value",  i);}};//创建线程Thread thread1 = new Thread(runnable);Thread thread2 = new Thread(runnable);thread1.start();thread2.start();//等待线程执行完try {thread1.join();thread2.join();} catch (InterruptedException e) {throw new RuntimeException(e);}concurrentHashMap.forEach((key, value) -> {System.out.println(key + value);});

http://www.dtcms.com/wzjs/471181.html

相关文章:

  • 河南艾特网站建设公司郑州网站推广公司电话
  • 月刊可以用什么网站做河南网站优化
  • 有关做详情页的参考网站关键词查网址
  • 物业管理软件南宁seo优化
  • 做五金建材市场的网站app拉新推广平台渠道
  • 宁津做网站网站推广seo优化
  • 网站建设多少钱一个月百度招商客服电话
  • 网站建设分析案例seo推广怎么样
  • 云南网上税务长沙seo网站排名优化公司
  • 可以完成交易的网站 做360推广平台登录入口
  • 沧州英文网站制作安装百度
  • 合肥做装修哪个网站好淘宝店铺怎么免费推广
  • 那种网站后台最好seo实战密码第四版
  • 中山市两学一做网站如何注册域名网站
  • dns解析失败登录不了网站荆门刚刚发布的
  • 石家庄网站建设760关键词排名查询
  • 网站可做哪些服务关键词英文
  • 青岛做网站的公司哪家好一点北京出大大事了
  • 广东专注网站建设企业营销方法有哪几种
  • 上网站乱码网站关键词优化排名软件系统
  • 做网站的的步骤怎么写seo结算系统
  • 西宁专业做网站的网络营销的手段包括
  • 模板网站 知乎百度竞价关键词出价技巧
  • 外贸网络营销培训百度seo优化系统
  • 南充市网站建设快速提升排名seo
  • php https网站开发亚马逊跨境电商个人开店
  • 网站建设 东八区互联网营销师是什么
  • 公司网站关键词优化知乎seo排名帝搜软件
  • 找南昌网站开发公司电话广告投放网站
  • 自动化设备技术支持东莞网站建设最近的国内新闻