首页 > 编程语言 >Java并发(八)----使用线程避免cpu占用100%

Java并发(八)----使用线程避免cpu占用100%

时间:2023-06-01 22:44:06浏览次数:51  
标签:try Java lock 100% InterruptedException ---- while sleep cpu

1、sleep 实现

在没有利用 cpu 来计算时,不要让 while(true) 空转浪费 cpu,这时可以使用 yield 或 sleep 来让出 cpu 的使用权给其他程序

while(true) {
    try {
        Thread.sleep(50);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}
  • 可以用 wait 或 条件变量达到类似的效果

  • 不同的是,后两种都需要加锁,并且需要相应的唤醒操作,一般适用于要进行同步的场景

  • sleep 适用于无需锁同步的场景

2、wait 实现

synchronized(锁对象) {
    while(条件不满足) {    
        try {
            锁对象.wait();
        } catch(InterruptedException e) {
            e.printStackTrace();
        }
    }
    // do sth...
}

3、条件变量实现

lock.lock();
try {
    while(条件不满足) {
        try {
            条件变量.await();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    // do sth...
} finally {
    lock.unlock();
}

 

标签:try,Java,lock,100%,InterruptedException,----,while,sleep,cpu
From: https://www.cnblogs.com/xiaoyh/p/17092325.html

相关文章

  • window10子系统下 libuv clone本地编译提示./autogen.sh: aclocal: not found错误
    libuv文档https://docs.libuv.org/en/v1.x/guide/introduction.htmlCodeAlltheexamplecodeandthesourceofthebookisincludedaspartofthelibuvprojectonGitHub.CloneorDownloadlibuv,thenbuildit:shautogen.sh./configuremakeThereisnoneed......
  • proto 可以等于 prototype 吗
    __proto__ 和 prototype 是不同的概念,它们不应该被混淆或等同使用。prototype 是函数对象(Function)特有的一个属性,函数对象通过它来实现对象的继承。函数对象的 prototype 属性指向一个原型对象,该原型对象在创建实例对象时会被作为实例对象的原型。而 __proto__ 则是Jav......
  • 浅谈扫描线
    扫描线扫描线一般运用在图形上面,它和它的字面意思非常相似,就是拿一根线,在图形上面扫来扫去。我们一般用它来解决图形的面积,周长,二位数点等问题。Atlantis问题在二维坐标系上,给出多个矩形的左下以及右上坐标,求出所有矩形构成的图形的面积。我们当然知道,如果数据范围很小,我们可......
  • [转]Visual Studio调试模式下添加命令行参数的方法
    在VS中向命令行添加参数,即向main()函数传递参数的方法: 右键单击:添加参数的工程-->属性-->配置属性-->调试,在右侧“命令参数”栏输入要添加的参数,各参数间用空格分离。例如:"-hide_banner" "Z:/media/subtitle/internal/divx/496x496.divx"则传递给main函数的argc为3,其中argv[0......
  • [JOISC 2021 Day3] 保镖 解题报告
    statement给定\(n\)个人,每个人从\(T_i\)秒开始从\(a_i\)移动到\(b_i\),每秒移动一个单位。给定\(q\)个保镖,每个保镖从\(P_i\)秒开始,从\(x_i\)开始移动,每秒一个单位。如果保镖和人在同一个位置上,就可以获得\(C_i\)的奖金,问每个保镖最多能获得多少奖金。analysis考......
  • requestAnimationFrame
    requestAnimationFrame是一个用于优化浏览器动画效果的API。它可以让浏览器在下一次重绘前执行指定的回调函数,从而可以更加流畅地执行动画效果,避免了使用setTimeout或setInterval可能引起的性能问题。requestAnimationFrame的用法非常简单,只需要在回调函数中编写动画效果......
  • [C++学习]关键字
    const关键字const关键字表示该数据类型的值只读,不可赋值,也就意味着它必须初始化。const若是修饰常量,则只读变量的值会放在“符号常量表”中,而不会立即开辟空间,当数据取地址时则会开辟空间。constintdata=100;int*p=(int*)&data;//开辟空间,p指向该空间。*p=200......
  • 策马踏雪翩然过,携来人间万千烟火 ---May Part Two
    MaySolutionSetPartTwoARC160EMakeBiconnected被加粗专门强调的性质是每个点的度数最多为\(3\)。那么这一定是一棵二叉树。不妨对于每一个点考虑。删去他,最多把整棵树分为三个连通块。至少要在三个连通块中连两条边。选一个叶子做根。每个叶子一定会往外面连边,然后叶......
  • 格路计数学习笔记
    格路计数学习(抄写)笔记\(2\)\(\operatorname{Dyck}\)路\(2.1\) 格路​ 定义2.1在平面直角坐标系中,横坐标和纵坐标都是整数的点称为格点,平面格路是指从一个格点到另一格点只走格点的路,格路的长度是指其所走的路的步数。\(2.2\) 自由路​ 定义\(2.2\)对于一条从\((0......
  • 实现表格中各单元格字段都支持自定义点灯的思路
    1.数据库,增加一个点灯信息字段:内容为json字符串存储,key即为每个列的字段名,内容就为点灯颜色。eg:lightInfo:{"name":"red","id":"blue"}2.前台用lightInfo[该列对应的具体的字段名]动态获取对应字段的点灯信息。3.前台点灯的编辑方式,可以采用vxetable右键menuConfig或是......