Count_Down

自定义grub主题

[亡魂溺海] 提交于 2020-02-26 08:30:30
1 概述 自定义grub引导菜单的主题,笔者的linux是deepin,感觉默认的grub主题不太好看,嗯,没办法,就是想改了。 这篇文章主要是修改/boot/grub/grub.cfg以及/boot/grub/themes/.../theme.txt这两个文件,修改之前要备份,不要问为什么。 2 下载主题 到这里 下载自己喜欢的主题。这是笔者下载的 主题 。 3 解压 tar -zxvf xxxx.tar.gz 4 安装 直接在解压后的文件夹运行: sudo ./install.sh 输入y: 5 效果 6 改进 还不满意,嗯。。。 6.1 progress_bar 这个是进度条的设置,如果觉得进度条不满意可以直接去修改/boot/grub/themes/主题名/theme.txt下的progress_bar设置: 可以修改(距离左边和顶部的)位置,宽度,高度,是否显示文本,设置文本等,还可以设置前景颜色(fg_color)与背景颜色(bg_color),还有进度条的风格,就是显示哪一些图片等。 6.2 boot_menu 这个是启动项菜单的设置,可以调整启动项的位置,字体大小,启动项高度,各个启动项之间的间隔,启动项前的图标大小等。 6.3 image 笔者的这个theme.txt有一个image,用来显示KDElogo的,这个可以选择直接不要,删除全部即可

多线程之CountDownLatch的用法及原理笔记

前提是你 提交于 2020-02-25 18:25:44
前言-CountDownLatch是什么? CountDownLatch是具有synchronized机制的一个工具,目的是让一个或者多个线程等待,直到其他线程的一系列操作完成。 CountDownLatch初始化的时候,需要提供一个整形数字,数字代表着线程需要调用countDown()方法的次数,当计数为0时,线程才会继续执行await()方法后的其他内容。 CountDownLatch(int count); 对象中的方法 getCount: 返回当前的计数count值, public void countDown() 调用此方法后,会减少计数count的值。 递减后如果为0,则会释放所有等待的线程 public void await() throws InterruptedException 调用CountDownLatch对象的await方法后。 会让当前线程阻塞,直到计数count递减至0。 如果当前线程数大于0,则当前线程在线程调度中将变得不可用,并处于休眠状态,直到发生以下两种情况之一: 1、调用countDown()方法,将计数count递减至0。 2、当前线程被其他线程打断。 public boolean await(long timeout, TimeUnit unit) throws InterruptedException

多线程进阶——狂神说java之JUC并发编程

霸气de小男生 提交于 2020-02-25 17:30:48
1、什么是JUC 学习可以参考:源码+官方文档 进行学习 文档地址: https://docs.oracle.com/javase/8/docs/api/ 首先我们看看什么是JUC 其次我们看看JUC都有哪些东西 于是我们可以总结下JUC可以分为五大类 1、同步工具类 2、lock类 3、原子类 4、集合相关类 5、Executor框架相关类 2、JUC入门前言——唠嗑 线程和进程 线程、进程,如果不能使用一句话说出来,说明技术不扎实! 进程:一个程序,QQ.exe Music.exe 程序的集合; 一个进程往往可以包含多个线程,至少包含一个! Java默认有几个线程? 2 个 mian、GC 线程:开了一个进程 Typora,写字,自动保存(线程负责的) 对于Java而言:Thread、Runnable、Callable Java 真的可以开启线程吗? 开不了,我们看看源码 public synchronized void start() { /** * This method is not invoked for the main method thread or "system" * group threads created/set up by the VM. Any new functionality added * to this method in the

Java多线程求和

自作多情 提交于 2020-01-07 19:32:13
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> `package test; import java.util.concurrent.*; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class SumService { private final Integer nthread; private final ExecutorService executorService; private final Lock lock; private final CountDownLatch countDownLatch; private Integer sum; public SumService(){ this.sum = new Integer(0); this.nthread = new Integer(100); this.executorService = new ThreadPoolExecutor(10, nthread, 10L, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(nthread)); this.lock = new

JUC锁框架——CountDownLatch

爷,独闯天下 提交于 2020-01-07 09:18:47
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> CountDownLatch简单介绍 CountDownLatch是同步工具类之一,可以指定一个计数值,在并发环境下 由线程 进行减1操作,当计数值变为0之后,被await方法阻塞的线程将会唤醒,实现线程间的同步。 CountDownLatch是一次性的,计数器的值只能在构造方法中初始化一次,之后没有任何机制再次对其设置值,当CountDownLatch使用完毕后,它不能再次被使用。 CountDownLatch的简单应用 public static void main(String[] args) { int threadNum = 10; final CountDownLatch countDownLatch = new CountDownLatch(threadNum); for (int i = 0; i < threadNum; i++) { final int tNum = i + 1; new Thread(() -> { System.out.println("thread " + tNum + " start"); Random random = new Random(); try { Thread.sleep(random.nextInt(10000) + 1000); } catch

可循环障碍CyclicBarrier 一次性减法CountDownLatch

隐身守侯 提交于 2020-01-06 14:12:02
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 其实两者的用法异曲同工 先说说 CyclicBarrier ,看看初始化: 有两种初始化,其实很容易理解,第一个是说多少个parties需要执行(通过调用CyclicBarrier.await()来计算线程数量),执行完成后BarrierAction最后收尾执行,第二个就是说多少个线程需要执行(通过调用CyclicBarrier.await()来计算线程数量),执行完成后不需要收尾。 功能 :有多少个线程执行完之后所有线程才能一起执行下一个。 特性:使用AQS和CAS确保线程安全,调用await()会进入condition queue,然后等所有线程执行完成后,也就是count增加到指定值,然后会调用signalAll()将条件队列中的移入到sync queue去执行。 再说说 CountDownLatch ,初始化: 声明一个数字,然后调用自己的await方法,等待其他线程通过调用countDown方法将此数字减到0,然后唤醒当前的线程。 功能 :当前线程等待其他线程执行完之后再执行。 特性:使用CAS和AQS保证线程安全 区别 : 1.cyclicBarrier使用加法到一定数目后唤醒所有线程,countDownLatch使用减法到0时唤醒主线程。 2.cyclicBarrier可以循环使用

线程协作工具之Semaphore、CountDownLatch、CyclicBarrier

点点圈 提交于 2019-12-20 15:26:58
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 各种线程协作工具 常见线程协作工具: 读写锁ReadWriteLock 信号量Semaphore 倒计时门栓CountDownLatch 循环栅栏CyclicBarrier 线程本地变量ThreadLocal 主要讲信号量Semaphore,倒计时门栓CountDownLatch, 循环栅栏CyclicBarrier 然后根据两个LeetCode题目来应用一下。 第一题: 三个不同的线程将会共用一个 Foo 实例。 线程 A 将会调用 one() 方法 线程 B 将会调用 two() 方法 线程 C 将会调用 three() 方法 请设计修改程序,以确保 two() 方法在 one() 方法之后被执行,three() 方法在 two() 方法之后被执行。 原生解法 应用场景及用法 基于notify/wait,所有的线程间通信类似通知的机制本质上都是notifyAll,多能用这个来实现。 class Foo { private static AtomicInteger flag = new AtomicInteger(0); private static Object Lock1 = new Object(); public Foo() { } public void first(Runnable

simpleDateFormat线程不安全

此生再无相见时 提交于 2019-12-07 18:57:00
simpleDateFormat是我们比较常用的日期转换类,但是它是一个线程不安全的类。 举例证明 public class DateFormatExample1 { //请求总数 private static int clientTotal = 1000; //同时允许执行的线程总数 private static int threadTotal = 20; private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); public static void main(String[] args) throws InterruptedException { final Semaphore semaphore = new Semaphore(threadTotal); final CountDownLatch countDownLatch = new CountDownLatch(clientTotal); ExecutorService executorService = Executors.newCachedThreadPool(); for (int i = 0; i < clientTotal; i++) { executorService.execute(new

同步工具类 CountDownLatch 和 CyclicBarrier

混江龙づ霸主 提交于 2019-12-06 11:02:02
在开发中,一些异步操作会明显加快执行速度带来更好的体验,但同时也增加了开发的复杂度,想了用好多线程,就必须从这些方面去了解 线程的 wait() notify() notifyall() 方法 线程异步返回 Future ThreadLocal 类 线程池 ThreadPoolExecutor 同步工具类 CountDownLatch , CyclicBarrier , Semaphore , Phaser , Exchanger 估计上面每一个对于 2~3 年的 java 同学来说都是恶梦,比较难以理解,本文简单说下 CountDownLatch 和 CyclicBarrier CountDownLatch CountDownLatch 一般在执行时间较长的可分解的任务中比较常用,算是同步工具类中最容易理解的一个。 示例一: 一个简单的例子:有一个 100 万的 excel 数据导出,需要从数据库中查出数据,并封装成 excel 数据然后输出到前端。 稍微分析可以知道这个操作肯定会很费时间,它的瓶颈出在查询数据库数据和写 excel 上,如果我每 10 万数据一页读数据库并写 excel 成一个文件,最后把所有的 excel 使用 zip 打包,使用多线程,由于读数据库并不会加锁,性能将会有一个量级的提升(有实践过),这时会有一个问题,我启动多个线程后

javaScript倒计时

纵然是瞬间 提交于 2019-12-05 03:51:37
//倒计时 let timeinterval=""; let countDownStart=""; countDown(timeTotal) { timeinterval = setInterval(() => { timeTotal--; countDownStart = timeTotal + "秒"; if (timeTotal <= 0) { clearInterval(this.timeinterval); countDownStart = "倒计时开始"; } }, 1000); } countDown(60); 来源: https://my.oschina.net/u/4228761/blog/3132101