随笔分类 - Java之多线程
摘要:题目描述: 有三个线程,要求分别在控制台输入后进行字符串的拼接"_A","_B","_C"。 条件是: 1.线程能顺序执行,线程1执行出“_A”,线程2执行“_B”,线程3执行“_C”; 2.三个线程同时启动。 代码如下: 若是只是顺序打印ABC的话:
阅读全文
摘要:《一》两则区别(笼统的说一下先): 1.lock是一个接口,synchronized是Java的关键字,synchronized是内置Java语言的实现。 2.synchronized是发生异常时,会自动地释放线程占有的锁,因此不会导致死锁的现象发生;而lock在发生异常时,如果没有主动通过unlo
阅读全文
摘要:《一》前言 多线程的异步执行方式,虽然能够最大限度发挥多核计算机的计算能力,但是如果不加控制,反而会对系统造成负担。线程本身也要占用内存空间,大量的线程会占用内存资源并且可能会导致Out of Memory。即便没有这样的情况,大量的线程回收也会给GC带来很大的压力。 为了避免重复的创建线程,线程池
阅读全文
摘要:关键字volatile的主要作用是使变量在多个线程间可见。 1.关键字volatile与死循环 如果不是在多继承的情况下,使用继承Thread类和实现Runnable接口在取得程序运行的结果上并没有什么太大的区别。如果一旦出现“多继承”的情况,则用实现Runnable接口的方式来处理多线程的问题就是
阅读全文
摘要:1.synchronized方法和锁对象 (1)、验证线程锁的是对象 代码如下: 1.1创建一个MyObject类: 1.2创建一个ThreadA类: 1.3创建一个ThreadB类: 1.4创建一个Test测试类: 1.5结果如下: 更改MyObject类后: 其他三个类不变,结果如下: 通过上面
阅读全文
摘要:1.方法内的变量为线程安全 "非线程安全"问题存在于"实例变量"中,如果是方法内部的私有变量,则不存在"非线程安全"问题,所得结果也就是"线程安全"了。下面我们来编写一个"线程安全"的例子: 1.1 HasSelfPrivate类如下: 1.2 创建一个ThreadA类: 1.3 创建一个Threa
阅读全文