zoukankan      html  css  js  c++  java
  • 【7.14/7.15】线程Thread

    1):进程的就绪(Runnable)和阻塞(Blocked)的区别

        当处理机空闲时,处于就绪状态的线程就会得到处理器资源,进入运行,当调用yield()时,处于运行状态的线程转入就绪状态。

        当线程陷入阻塞时,即使处理机空闲也不会为该进程分配处理器资源,直到相关的动作完成(sleep时间到、I/O输入完成,获得同步锁,收到通知

        、resume()),sleep()、等待I/O输入,等待同步锁、等待通知、suspend()等会让进程进入阻塞状态。

     2):Lock和synchronized的区别

        Lock是一个接口,需要使用其子类ReentrantLock可以创建对象

        Lock需要手动上锁,包括上锁的时间和地点,上锁后需要手动解锁   

    //Lock 的用法
    public static Lock lock=new ReentrantLock();
    public static Condition condition=lock.newCondition();
    Test.lock.lock();
                try {
                        Test.condition.signal();
                         Test.condition.await();            
                } finally {
                    Test.lock.unlock();
                }
    //synchronized的用法
    private Res res;//这个res是需要上锁的资源 synchronized (res) { res.notify(); try { res.wait(); } catch (InterruptedException e) { e.printStackTrace(); } }

     3):信号量(Semaphore)的用法

    //创建一个银行账户Account类,在创建并启动100个线程往同一个Account类实例里面添加一块钱
    public static class Account{
        private static Semaphore semaphore = new Semaphore(1);  //创建一个信号量
        private int balance =0;
        public int getBalance(){
            return balance;
        }
        public  void deposit(int amount){
            try {
                semaphore.acquire();
                int newBalance = balance + amount;
                Thread.sleep(4);   
                balance= newBalance;
            } catch (InterruptedException e) {
                e.printStackTrace();
            }finally{
                semaphore.release();   //返回一个信号量
            }
        }
    }
  • 相关阅读:
    vector读入指定行数但不指定列数的数字
    p4语言编程环境安装
    近期学习资料一览表
    c++之洛谷P1068分数线划定
    打开文件的方法
    调用当前年月日
    想学习启发式优化算法,不知从何学起?
    使用这几款插件,能让你在GitHub看代码的效率翻倍
    微信公众号放Latex数学公式的完美解决方案
    手把手教你用Git备份保存论文和代码等重要数据到云端
  • 原文地址:https://www.cnblogs.com/yuwenhui/p/7183199.html
Copyright © 2011-2022 走看看