概念部分:
1.并发和并行的区别:
并发 (Concurrency):一个处理器“同时”处理多个任务
并行 (Parallelism):多个处理器 “同时”处理多个任务
2.多线程的优点和缺点:
多线程的优点:
可并行处理任务,减少单个任务的等待时间
线程较进程或子进程系统开销小
线程间较容易共享资源
多核情况下可充分利用CPU资源
多线程的缺点: 访问冲突 锁竞争 –死锁 –锁粒度 上下文切换开销 同步/内存拷贝开销示意图:
语法糖:
1.定义线程名字(ID)和循环数
//定义线程循环次数PRotected int countDown = 10;//可以在线程中设定ID并打印来区分各个线程private static int taskCount = 0;private final int id = taskCount++;while(countDown-- >0){}
2.获取线程名称
System.out.println(Thread.currentThread().getName()+":"+value);... Thread t1 = new Thread(us,"t1");
JVM部分:
关于锁:
1.某个对象实例内,synchronized aMethod(){}可以防止多个线程同时访问这个对象的synchronized方法(如果一个对象有多个synchronized方法,只要一个线程访问了其中的一个synchronized方法,其它线程不能同时访问这个对象中任何一个synchronized方法)。这时,不同的对象实例的synchronized方法是不相干扰的。也就是说,其它线程照样可以同时访问相同类的另一个对象实例中的synchronized方法;
《Tinking In Java》部分:
1.并发具有可论证的确定性,但是实际上具有不可确定性。
2.如果没有任务会阻塞,那么在单处理器机器上使用并发就没有任何意义。
3.某些编程语言被设计为可以将并发任务彼此隔离,这些语言通常被称作函数型语言——erlang。
4.语法糖:while(countDown-- >0)、private final int id = taskCount++; 使用后置的++和--,可以进行计数器加减的操作,方便又清晰。
5.各种执行器(Executor):
CachedThreadPool:一般首选,会创建于所需数量相同的线程。
FixedThreadPool:事先分好好线程,限制了线程数量。
SingleThreadExecutor就像是线程数量为1的FixedThreadPool(它提供了长期存活和并发保证,适合于某些特定任务)。SingleThreadExecutor会序列化所有提交给它的任务。
6.如果希望任务完成时能返回值,用callable代替runnable接口。
资料:
http://blog.csdn.net/csh624366188/article/details/7318245
新闻热点
疑难解答