java并发、多线程知识点总结

1、Web库类、Sevlet天生有多线程性。

2、定义任务:使用Runnable接口并实现run()方法。   而将runnable (不返回任何值) 对象编程工作任务的方式为

Thread t = new Thread(new Task()); 
t.start();

这里start()会迅速返回,因为每个任务都由不同的线程执行,不影响main()中的其他任务操作。

如果想要添加更多的线程,就可以使用for循环来进行操作:

for(int i=0; i<5; i++)
    new Thread(new Task()).start();

也可使用线程池来存储线程

ExecutorService exec = Executors.newCachedThreadPool();
for(int i=0; i<5; i++)
    exec.execute(new Task());
exec.shutdown();

newCachedThreadPool可以使用其他Executor代替,比如固定线程个数的newFixedThreadPool,还有接受线程数量为1的SingleThreadExecutor (特殊的newFixedThreadPool),其会序列化所有提交的任务并维护它自己的悬挂任务队列。

当有大量线程并且运行的任务为使用文件系统时,可以使用SingleThreadExecutor 以保证任何线程中都只有唯一的任务运行。

3、如果需要线程有返回值,则使用Callable接口,带有call函数并且使用exec.submit()来调用,而submit方法会产生Future对象 (使用Callable返回结果的特定类型并进行参数化),然后使用Future.get函数来获取结果。

4、可以使用sleep()来控制任务之间的顺序运行,可以跑出InterruptedException异常。但因为顺序行为依赖于底层的线程机制,在不同的操作系统之间有差异。所以控制任务执行,最好使用同步控制,或者编写协作例程。

5、调用Thread.setDaemon可以将线程设置为后台线程,从而保证在非后台线程结束时程序终止并杀死所有后台线程。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值