java 中多线程和锁的使用
关键词: implements 实现 Runnable 类
run() 方法
注意点 : 创建类的实例 InterfaceController inter=new InterfaceController(); 的时候,不要放在循环中 , 如果放在循环中 run 方法中的lock 是起不到作用的,
正确写法 看下面的例子
@Controller
@RequestMapping("/interface")
public class InterfaceController implements Runnable{
private Lock lock = new ReentrantLock();
private List<LoaneePriorityModel> listPage;
int k = 1;
public void setlistPage(List<LoaneePriorityModel> listPage)
{
this.listPage = listPage;
}
public void setk(int k)
{
this.k = k;
}
private Lock lock2 = new ReentrantLock();
/* 类Runnable 的具体实现方法
* @see java.lang.Runnable#run()
*/
public void run(){
lock2.lock();
try{
if(k==1)
{
log.info(MessageFormat.format("k==1睡眠5秒:{0}",""));
Thread.sleep(5000);// 睡眠100毫秒
}
List<LoaneePriorityModel> aa=listPage;
log.info(MessageFormat.format("输出数据集条数:{0}", aa.size()));
}
catch(Exception ex)
{
log.info(MessageFormat.format("多线程异常信息:{0}",ex));
}
finally{
lock2.unlock();
}
}
@RequestMapping(value = "updateLoaneePriorityNew", method = RequestMethod.POST)
@ResponseBody
public int updateLoaneePriorityNew(HttpServletRequest request,
@RequestBody String requestBody) {
lock.lock();
try {
JSONArray json = JSONArray.fromObject(requestBody);
log.info(MessageFormat.format("更改借款工单优先级 ,接收到的josn字符串:{0}", json));
System.out.println(MessageFormat.format(
"更改借款工单优先级 ,接收到的josn字符串:{0}", json));
List<LoaneePriorityModel> persons = (List<LoaneePriorityModel>) JSONArray
.toCollection(json, LoaneePriorityModel.class);
InterfaceController inter=new InterfaceController();
for (int i = 0; i <= persons.size(); i++) {
// 写修改优先级的主体方法
int f=2; //定义每组的数量
if(i==f*k-1&&i!= persons.size())
{
log.info(MessageFormat.format("-----f*k等于:{0}", f*k));
listPage= persons.subList(0, f*k);
log.info(MessageFormat.format("输入数据集条数:{0}", listPage.size()));
inter.setlistPage(listPage);
inter.setk(k);
Thread t = new Thread(inter);
Thread.sleep(5000);// 睡眠100毫秒
t.start();
k++;
}
if(i== persons.size())
{
log.info(MessageFormat.format("=====f*(k-1)等于:{0}", f*(k-1)));
listPage= persons.subList(f*(k-1), persons.size());
//InterfaceController inter=new InterfaceController();
log.info(MessageFormat.format("输入数据集条数:{0}", listPage.size()));
inter.setlistPage(listPage);
Thread t = new Thread(inter);
inter.setk(k);
t.start();
k++;
}
}
} catch (Exception ex) {
log.info(MessageFormat.format("更改借款工单优先级 ,出现异常:{0}", ex));
System.out.println(MessageFormat.format("更改借款工单优先级 ,出现异常:{0}", ex));
} finally {
lock.unlock();
}
return k;
}
}
//-----------------------------------------------------------------------------------------------------------
多线程二:不需要继承 实现 Runnable 接口的方式
ExecutorService 需要引用包 package java.util.concurrent;
ExecutorService threadPool = Executors.newFixedThreadPool(ConstantUtil.THREAD_POOL_SIZE);
threadPool.submit(new Callable<String>() {
@Override
public String call() throws Exception {
batchStartProcessCancel(list,user);
return null;
}
});
java 中多线程和锁的使用的更多相关文章
- java 中多线程和锁的使用以及获取多线程执行结果
多线程一:原生的写法 关键词 implements 实现 Runnable 类 run() 方法 注意点 : 创建类的实例 InterfaceController inter=new Int ...
- 分门别类总结Java中的各种锁,让你彻底记住
概念 公平锁/非公平锁 公平锁是指多个线程按照申请锁的顺序来获取锁. 非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁.有可能,会造成优先级反转或者饥 ...
- Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等
Java 中15种锁的介绍 Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等,在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类 ...
- Java中的各种锁--分类总结
前言 本文需要具备一定的多线程基础才能更好的理解. 学习java多线程时,最头疼的知识点之一就是java中的锁了,什么互斥锁.排它锁.自旋锁.死锁.活锁等等,细分的话可以罗列出20种左右的锁,光是看着 ...
- Java中15种锁的分类综合总结
本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...
- Java 中的各种锁和 CAS + 面试题
Java 中的各种锁和 CAS + 面试题 如果说快速理解多线程有什么捷径的话,那本文介绍的各种锁无疑是其中之一,它不但为我们开发多线程程序提供理论支持,还是面试中经常被问到的核心面试题之一.因此下面 ...
- Java中15种锁的介绍
作者:搜云库技术团队 原文:https://segmentfault.com/a/1190000017766364 1. Java 中15种锁的介绍 在读很多并发文章中,会提及各种各样锁如公平锁,乐观 ...
- 一文带你看懂Java中的Lock锁底层AQS到底是如何实现的
前言 相信大家对Java中的Lock锁应该不会陌生,比如ReentrantLock,锁主要是用来解决解决多线程运行访问共享资源时的线程安全问题.那你是不是很好奇,这些Lock锁api是如何实现的呢?本 ...
- Java进阶(四十二)Java中多线程使用匿名内部类的方式进行创建3种方式
Java中多线程使用匿名内部类的方式进行创建3种方式 package cn.edu.ujn.demo; // 匿名内部类的格式: public class ThreadDemo { public st ...
随机推荐
- Linux下对各种压缩文件处理
Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的.生成tar包后,就可以用其它的程序来进 行压缩了,所以首先就来讲讲ta ...
- 修改Wordpress目录
安装完wordpress,此时访问地址为:http://localhost/wordpress 1.不想让人知道我的文件目录,于是我把原来的wordpress改为w, 2.后台设置 3.WordPre ...
- ECSHOP不同商品分类调用不同模板
1.在ecs_category 表 添加 template 字段 可以在后台运行sql语句:alter table `ecs_category` Add column template text NO ...
- js实现图片向上播放(轮番滚动)
js实现图片向上播放(轮番滚动) 实现方式,多种多样,这里我们来看javascript实现方式,重点是研究里面的源代码: 看看别人是如何写出“优雅的代码” <!DOCTYPE html PUBL ...
- asm/aam links
http://personalpages.manchester.ac.uk/staff/timothy.f.cootes/asm_links.html
- 12岁的少年教你用Python做小游戏
首页 资讯 文章 频道 资源 小组 相亲 登录 注册 首页 最新文章 经典回顾 开发 设计 IT技术 职场 业界 极客 创业 访谈 在国外 - 导航条 - 首页 最新文章 经典回顾 开发 ...
- jquery-cookie插件怎么读写json数据
需要先转换下jsonvar jsonStr = JSON.stringify(obj);把jsonStr存进cookie用的时候取出来 obj=JSON.parse(jsonStr);
- css页面布局
写在前面: 页面布局整体上可以分为两类:固定宽度(一般固定960px):流式布局:将流式布局转换为固定布局很容易,只需要外围再包括一个div,为其设置宽度即可. html默认的布局方式是将每个块状标签 ...
- UIActivityIndicatorView
1. activityIndicatorViewStyle 设置指示器的样式 UIActivityIndicatorViewStyleWhiteLarge UIActivityIndicator ...
- Xcode 6.x 添加Empty Application模板
Xcode 6.x 添加Empty Application模板 在Apple最新的XCode6.x中没有了Empty Application模板,这对一个老人来说是不能别接受的,同时也可以看出Appl ...