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

宿迁网站推广公司手车做网课网站

宿迁网站推广公司,手车做网课网站,专业网站开发培训,网站部分乱码背景 有三个线程,每个线程分别循环输出A、B、C,各线程循环10次,要求输出结果是ABCABCABC这样的 代码 Data public class PrintThread extends Thread {private String string; // 输出的字符串private int order; …

背景

有三个线程,每个线程分别循环输出A、B、C,各线程循环10次,要求输出结果是ABCABCABC这样的

代码

@Data
public class PrintThread extends Thread {private String string;               // 输出的字符串private int order;                   // 输出的顺序private static Object lock;          // 静态锁对象private static volatile int index = 0; // 共享的索引变量public PrintThread(String string, int order, Object lock) {this.string = string;this.order = order;this.lock = lock;}@Overridepublic void run() {for (int i = 0; i < 10; i++) {synchronized (lock) {  // 使用锁对象进行同步while (index % 3 != order) {  // 判断是否轮到当前线程输出try {lock.wait();  // 如果不是轮到当前线程输出,则释放锁并等待} catch (InterruptedException e) {e.printStackTrace();}}try {Thread.sleep(10);  // 模拟输出过程的耗时操作} catch (InterruptedException e) {e.printStackTrace();}index++;  // 修改索引变量,表示下一个线程可以输出了System.out.println(string);  // 输出字符串lock.notifyAll();  // 唤醒其他等待的线程}}}public static void main(String[] args) {try {Object lock = new Object();  // 创建锁对象PrintThread threadA = new PrintThread("A", 0, lock);  // 创建线程APrintThread threadB = new PrintThread("B", 1, lock);  // 创建线程BPrintThread threadC = new PrintThread("C", 2, lock);  // 创建线程CthreadA.start();  // 启动线程AthreadB.start();  // 启动线程BthreadC.start();  // 启动线程C} catch (Exception e) {e.printStackTrace();}}
}

最后

实际会有这样的场景吗?下面举几个例子

1、假设在一个食堂,有很多人在排队打饭,每个人需要完成以下步骤:先拿餐具,然后拿菜,再拿饭,最后付钱。

2、多线程下载器。当我们下载一个大文件时,可以使用多个线程同时从不同的服务器上下载文件的不同部分,然后将这些部分合并成一个完整的文件。通过多个线程交替遍历不同的服务器,可以提高下载速度,加快文件的下载过程。

3、医院的门诊、机场的登机口、超市的收银台等等。

扩展

除了wait+notifyAll,还有其他的实现方式

  1. 使用CountDownLatchCountDownLatch是一个同步辅助类,可以用于控制一个或多个线程等待其他线程完成操作。它通过一个计数器来实现,线程调用await()方法等待计数器变为0,而其他线程调用countDown()方法来减少计数器的值。当计数器变为0时,等待的线程将被唤醒。

  2. 使用CyclicBarrierCyclicBarrier也是一个同步辅助类,可以用于多个线程之间的同步。它和CountDownLatch类似,都是通过计数器来实现线程的等待和唤醒。不同之处在于,CyclicBarrier的计数器可以重复使用,当计数器减为0时,所有等待的线程都会被唤醒,并且计数器会被重置为初始值。

  3. 使用SemaphoreSemaphore是一个计数信号量,可以用来控制同时访问某个资源的线程个数。它维护了一个许可证的计数器,线程可以通过acquire()方法获取许可证,如果计数器大于0,线程可以继续执行;如果计数器为0,线程将被阻塞。线程在使用完资源后,需要调用release()方法释放许可证,使得其他线程可以继续访问资源。

  4. 使用LockConditionLock是一个可重入的互斥锁,可以用来替代synchronized关键字实现线程的同步。Condition是与Lock相关联的条件对象,可以用来实现线程的等待和唤醒。线程可以通过调用await()方法等待条件满足,而其他线程可以通过调用signal()signalAll()方法来唤醒等待的线程。

http://www.yayakq.cn/news/567556/

相关文章:

  • 南宁江南区网站制作多少钱本地网站后台管理建设
  • 机械行业网站模板做企业网站用什么cms
  • 购物网站大全分类韩国网站 后缀
  • 太原住房和城乡建设部网站重庆公司核名在哪个网站
  • 网站制作中动态展示怎么做免费移动版wordpress
  • wordpress中国网站排名学校做网站需要什么
  • 十大团购网站厦门网站制作阳哥
  • 如何做婚庆公司的网站手机网页微信
  • 东莞怎么制作网站网站建设 知乎
  • asp购物网站客户查看购物车如何提高网站搜索排名
  • 手机怎么做淘客网站个人网站制作在线
  • 手机与pc的网站开发北京开网站建设公司
  • 荆州大气网站建设价格云科技网站建设
  • 济南建站详情云南网站制作一条龙全包
  • 网站建设丶金手指花总13ev123建站
  • 网站友情链接模板常熟建设网站
  • 网站前端是做啥的低价网站建设咨询
  • 自己创建的网站怎么做流量网站页面链接怎么做
  • 做贸易上什么网站网站seo怎么做知乎
  • 网上做任务的网站有哪些招标网与采购网
  • 南京网站定制开发公司百度开放云制作网站
  • 十大不收费看盘网站wordpress如何调用作品集
  • 学做网站需要买什么书桐城市建设局网站
  • 夏邑县城乡建设规划局网站南充市建设厅官方网站
  • 网站百度关键词优化珠海网站开发公司哪家好
  • 怎么做点击文字进入的网站网页设计网站的设计与规划
  • 宜城市城乡建设局网站备案家装公司排名前十强
  • 做不规则几何图形的网站摄影网站设计代码
  • 泰顺做网站网站开发实战演练
  • 富源县建设局的网站是什么网站开发是前端开发吗