上一页 1 ··· 39 40 41 42 43 44 45 46 47 ··· 55 下一页
摘要: 控制反转(IOC)是 Spring 框架的核心思想,用我自己的话说,就是你要做一件 事,别自己可劲 new 了,你就说你要干啥,然后外包出去就好 依赖注入(DI) 在我浅薄的想法中,就是通过接口的引用和构造方法的表达,将 一些事情整好了反过来传给需要用到的地方 阅读全文
posted @ 2020-06-13 18:14 咔啡 阅读(259) 评论(0) 推荐(0)
摘要: 你可以使用有序集合,如 TreeSet 或 TreeMap,你也可以使用有顺序的的集合, 如 list,然后通过 Collections.sort() 来排序。 阅读全文
posted @ 2020-06-13 16:19 咔啡 阅读(391) 评论(0) 推荐(0)
摘要: 你可以使用 Arrays.toString() 和 Arrays.deepToString() 方法来打印数组。由 于数组没有实现 toString() 方法,所以如果将数组传递给 System.out.println() 方法,将无法打印出数组的内容,但是 Arrays.toString() 可以 阅读全文
posted @ 2020-06-13 16:17 咔啡 阅读(2360) 评论(0) 推荐(0)
摘要: byte[] bytes = new byte[10]; ByteBuffer buf = ByteBuffer.wrap(bytes); 阅读全文
posted @ 2020-06-13 16:10 咔啡 阅读(809) 评论(0) 推荐(0)
摘要: String s="123"; int i; 第一种方法:i=Integer.parseInt(s); 第二种方法:i=Integer.valueOf(s).intValue(); 阅读全文
posted @ 2020-06-13 15:42 咔啡 阅读(4032) 评论(0) 推荐(0)
摘要: false,因为有些浮点数不能完全精确的表示出来。 阅读全文
posted @ 2020-06-13 15:15 咔啡 阅读(381) 评论(0) 推荐(0)
摘要: 可以通过 java.lang.Runtime 类中与内存相关方法来获取剩余的内存,总内存及 最大堆内存。通过这些方法你也可以获取到堆使用的百分比及堆内存的剩余空间。 Runtime.freeMemory() 方法返回剩余空间的字节数,Runtime.totalMemory() 方法总内存的字节数,R 阅读全文
posted @ 2020-06-13 15:07 咔啡 阅读(1571) 评论(0) 推荐(0)
摘要: 答案 http://javarevisited.blogspot.in/2012/12/how-to-create-thread-safe-singl eton-in-java-example.html 请参考答案中的示例代码,这里面一步一步教你创建一个线程安全的 Java 单例 类。当我们说线程安 阅读全文
posted @ 2020-06-13 15:03 咔啡 阅读(425) 评论(0) 推荐(0)
摘要: 在 Linux 下,你可以通过命令 kill -3 PID (Java 进程的进程 ID)来获取 Java 应用的 dump 文件。在 Windows 下,你可以按下 Ctrl + Break 来获取。这 样 JVM 就会将线程的 dump 文件打印到标准输出或错误文件中,它可能打印在 控制台或者日 阅读全文
posted @ 2020-06-13 14:51 咔啡 阅读(1132) 评论(0) 推荐(0)
摘要: 当多个进程都企图对共享数据进行某种处理,而最后的结果又取决于进程运行的顺序时,则我们认为这发生了竞争条件(race condition)。 阅读全文
posted @ 2020-06-13 14:45 咔啡 阅读(516) 评论(0) 推荐(0)
摘要: 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。 这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当 队列满时,存储元素的线程会等待队列可用。 阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消 费者是从队列里拿元素的线程。阻塞队列就是生产 阅读全文
posted @ 2020-06-13 14:40 咔啡 阅读(439) 评论(0) 推荐(0)
摘要: 在 Java 并发程序中 FutureTask 表示一个可以取消的异步运算。它有启动和取消 运算、查询运算是否完成和取回运算结果等方法。只有当运算完成的时候结果才 能取回,如果运算尚未完成 get 方法将会阻塞。一个 FutureTask 对象可以对调用 了 Callable 和 Runnable 阅读全文
posted @ 2020-06-13 13:31 咔啡 阅读(361) 评论(0) 推荐(0)
摘要: WeakHashMap 的工作与正常的 HashMap 类似,但是使用弱引用作为 key,意思就是当 key 对象没有任何引用时,key/value 将会被回收。 阅读全文
posted @ 2020-06-13 13:23 咔啡 阅读(156) 评论(0) 推荐(0)
摘要: Executor 框架是一个根据一组执行策略调用,调度,执行和控制的异步任务的框 架。 无限制的创建线程会引起应用程序内存溢出。所以创建一个线程池是个更好的的 解决方案,因为可以限制线程的数量并且可以回收再利用这些线程。利用 Executors 框架可以非常方便的创建一个线程池。 阅读全文
posted @ 2020-06-13 13:19 咔啡 阅读(205) 评论(0) 推荐(0)
摘要: 原子操作(atomic operation)意为”不可被中断的一个或一系列操作” 。 处理器使用基于对缓存加锁或总线加锁的方式来实现多处理器之间的原子操作。 在 Java 中可以通过锁和循环 CAS 的方式来实现原子操作。 CAS 操作—— Compare & Set,或是 Compare & Sw 阅读全文
posted @ 2020-06-13 13:18 咔啡 阅读(220) 评论(0) 推荐(0)
摘要: Java 中的 String 类提供了支持正则表达式操作的方法,包括:matches()、 replaceAll()、replaceFirst()、split()。此外,Java 中可以用 Pattern 类表示正则 表达式对象,它提供了丰富的 API 进行各种正则表达式操作,请参考下面面试题 的代 阅读全文
posted @ 2020-06-13 13:14 咔啡 阅读(696) 评论(0) 推荐(0)
摘要: Blob 是指二进制大对象(Binary Large Object),而 Clob 是指大字符对象 (Character Large Objec),因此其中 Blob 是为存储大的二进制数据而设计的, 而 Clob 是为存储大的文本数据而设计的。JDBC 的 PreparedStatement 和 阅读全文
posted @ 2020-06-13 13:10 咔啡 阅读(310) 评论(0) 推荐(0)
摘要: 在 Java 发展史上曾经使用 suspend()、resume()方法对于线程进行阻塞唤醒,但 随之出现很多问题,比较典型的还是死锁问题。 解决方案可以使用以对象为目标的阻塞,即利用 Object 类的 wait()和 notify()方 法实现线程阻塞。 首先,wait、notify 方法是针对 阅读全文
posted @ 2020-06-13 13:06 咔啡 阅读(1123) 评论(0) 推荐(0)
摘要: Lock 接口比同步方法和同步块提供了更具扩展性的锁操作。 他们允许更灵活的结构,可以具有完全不同的性质,并且可以支持多个相关类的 条件对象。 它的优势有: 可以使锁更公平 可以使线程在等待锁的时候响应中断 可以让线程尝试获取锁,并在无法获取锁的时候立即返回或者等待一段时间 可以在不同的范围,以不同 阅读全文
posted @ 2020-06-13 12:58 咔啡 阅读(234) 评论(0) 推荐(0)
摘要: 当你调用 start()方法时你将创建新的线程,并且执行在 run()方法里的代码。 但是如果你直接调用 run()方法,它不会创建新的线程也不会执行调用线程的代码, 只会把 run 方法当作普通方法去执行。 阅读全文
posted @ 2020-06-13 12:04 咔啡 阅读(620) 评论(0) 推荐(0)
摘要: 线程组和线程池是两个不同的概念,他们的作用完全不同,前者是为了方便线程 的管理,后者是为了管理线程的生命周期,复用线程,减少创建销毁线程的开销。 阅读全文
posted @ 2020-06-13 12:01 咔啡 阅读(218) 评论(0) 推荐(0)
摘要: 中断 和 共享变量 阅读全文
posted @ 2020-06-13 11:59 咔啡 阅读(161) 评论(0) 推荐(0)
摘要: 计算机通常只有一个 CPU,在任意时刻只能执行一条机器指令,每个线程只有获得 CPU 的使用权才能执行指令.所谓多线程的并发运行,其实是指从宏观上看,各个线 程轮流获得 CPU 的使用权,分别执行各自的任务.在运行池中,会有多个处于就绪状 态的线程在等待 CPU,JAVA 虚拟机的一项任务就是负责线 阅读全文
posted @ 2020-06-13 10:01 咔啡 阅读(201) 评论(0) 推荐(0)
摘要: 所谓后台(daemon)线程,是指在程序运行的时候在后台提供一种通用服务的线 程,并且这个线程并不属于程序中不可或缺的部分。因此,当所有的非后台线程 结束时,程序也就终止了,同时会杀死进程中的所有后台线程。反过来说, 只要有任何非后台线程还在运行,程序就不会终止。必须在线程启动之前调用 setDae 阅读全文
posted @ 2020-06-13 09:08 咔啡 阅读(1719) 评论(0) 推荐(0)
摘要: 不可变对象(Immutable Objects)即对象一旦被创建它的状态(对象的数据,也即 对象属性值)就不能改变,反之即为可变对象(Mutable Objects)。 不可变对象的类即为不可变类(Immutable Class)。Java 平台类库中包含许多不可 变类,如 String、基本类型的 阅读全文
posted @ 2020-06-12 20:29 咔啡 阅读(365) 评论(0) 推荐(0)
摘要: 在执行程序时,为了提供性能,处理器和编译器常常会对指令进行重排序,但是 不能随意重排序,不是你想怎么排序就怎么排序,它需要满足以下两个条件: 在单线程环境下不能改变程序运行的结果; 存在数据依赖关系的不允许重排序 需要注意的是:重排序不会影响单线程环境的执行结果,但是会破坏多线程的执 行语义。 阅读全文
posted @ 2020-06-09 11:48 咔啡 阅读(172) 评论(0) 推荐(0)
摘要: 双因素身份验证为帐户登录过程启用第二级身份验证。 因此,假设用户必须只输入用户名和密码,那么这被认为是单因素身份验证。 阅读全文
posted @ 2020-06-08 22:35 咔啡 阅读(2182) 评论(0) 推荐(0)
摘要: 为什么要使用 Executor 线程池框架 1、每次执行任务创建线程 new Thread()比较消耗性能,创建一个线程是比较耗 时、耗资源的。 2、调用 new Thread()创建的线程缺乏管理,被称为野线程,而且可以无限制的 创建,线程之间的相互竞争会导致过多占用系统资源而导致系统瘫痪,还有线 阅读全文
posted @ 2020-06-08 22:29 咔啡 阅读(520) 评论(0) 推荐(0)
摘要: 悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每 次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。传 统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写 锁等,都是在做操作之前先上锁。再比如 Java 里面的同步原语 synchroniz 阅读全文
posted @ 2020-06-08 22:27 咔啡 阅读(340) 评论(0) 推荐(0)
摘要: 如果其他方法没有 synchronized 的话,其他线程是可以进入的。 所以要开放一个线程安全的对象时,得保证每个方法都是线程安全的。 阅读全文
posted @ 2020-06-08 22:26 咔啡 阅读(183) 评论(0) 推荐(0)
摘要: 举例来说明锁的可重入性 public class UnReentrant{ Lock lock = new Lock(); public void outer(){ lock.lock(); inner(); lock.unlock(); } public void inner(){ lock.lo 阅读全文
posted @ 2020-06-08 22:22 咔啡 阅读(425) 评论(0) 推荐(0)
摘要: volatile 保证内存可见性和禁止指令重排。 volatile 用于多线程环境下的单次操作(单次读或者单次写)。 阅读全文
posted @ 2020-06-08 22:11 咔啡 阅读(210) 评论(0) 推荐(0)
摘要: 我们可以使用 Thread 类的 join()方法来确保所有程序创建的线程在 main()方法退出前结束。 阅读全文
posted @ 2020-06-08 21:58 咔啡 阅读(798) 评论(0) 推荐(0)
摘要: 创建线程要花费昂贵的资源和时间,如果任务来了才创建线程那么响应时间会变 长,而且一个进程能创建的线程数有限。为了避免这些问题,在程序启动的时候 就创建若干线程来响应处理,它们被称为线程池,里面的线程叫工作线程。从 JDK1.5 开始,Java API 提供了 Executor 框架让你可以创建不同的 阅读全文
posted @ 2020-06-08 18:14 咔啡 阅读(595) 评论(0) 推荐(0)
摘要: 处于等待状态的线程可能会收到错误警报和伪唤醒,如果不在循环中检查等待条件,程序就会在没有满足结束条件的情况下退出。 阅读全文
posted @ 2020-06-08 15:51 咔啡 阅读(558) 评论(0) 推荐(0)
摘要: 两个方法都可以向线程池提交任务,execute()方法的返回类型是 void,它定义在 Executor 接口中。 而 submit()方法可以返回持有计算结果的 Future 对象,它定义在 ExecutorService 接口中,它扩展了 Executor 接口,其它线程池类像 ThreadPo 阅读全文
posted @ 2020-06-08 15:25 咔啡 阅读(512) 评论(0) 推荐(0)
摘要: 1、新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread(); 2、就绪状态(Runnable):当调用线程对象的 start()方法(t.start();),线程 即进入就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备,随时 等待 阅读全文
posted @ 2020-06-08 15:19 咔啡 阅读(396) 评论(0) 推荐(0)
摘要: 当然可以。但是如果我们调用了 Thread 的 run()方法,它的行为就会和普通的方 法一样,会在当前线程中执行。为了在新的线程中执行我们的代码,必须使用 Thread.start()方法。 阅读全文
posted @ 2020-06-08 00:43 咔啡 阅读(625) 评论(0) 推荐(0)
摘要: 1、采用实现 Runnable、Callable 接口的方式创建多线程。 优势是: 线程类只是实现了 Runnable 接口或 Callable 接口,还可以继承其他类。 在这种方式下,多个线程可以共享同一个 target 对象,所以非常适合多个相同线 程来处理同一份资源的情况,从而可以将 CPU、 阅读全文
posted @ 2020-06-08 00:36 咔啡 阅读(180) 评论(0) 推荐(0)
摘要: 这个其实前面有提到过,FutureTask 表示一个异步运算的任务。FutureTask 里面 可以传入一个 Callable 的具体实现类,可以对这个异步运算的任务的结果进行等 待获取、判断是否已经完成、取消任务等操作。当然,由于 FutureTask 也是 Runnable 接口的实现类,所以 阅读全文
posted @ 2020-06-08 00:34 咔啡 阅读(774) 评论(0) 推荐(0)
上一页 1 ··· 39 40 41 42 43 44 45 46 47 ··· 55 下一页