关键词: 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 中多线程和锁的使用的更多相关文章

  1. java 中多线程和锁的使用以及获取多线程执行结果

    多线程一:原生的写法   关键词 implements  实现  Runnable 类 run()  方法 注意点 : 创建类的实例 InterfaceController inter=new Int ...

  2. 分门别类总结Java中的各种锁,让你彻底记住

    概念 公平锁/非公平锁 公平锁是指多个线程按照申请锁的顺序来获取锁. 非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁.有可能,会造成优先级反转或者饥 ...

  3. Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等

    Java 中15种锁的介绍 Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等,在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类 ...

  4. Java中的各种锁--分类总结

    前言 本文需要具备一定的多线程基础才能更好的理解. 学习java多线程时,最头疼的知识点之一就是java中的锁了,什么互斥锁.排它锁.自旋锁.死锁.活锁等等,细分的话可以罗列出20种左右的锁,光是看着 ...

  5. Java中15种锁的分类综合总结

    本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...

  6. Java 中的各种锁和 CAS + 面试题

    Java 中的各种锁和 CAS + 面试题 如果说快速理解多线程有什么捷径的话,那本文介绍的各种锁无疑是其中之一,它不但为我们开发多线程程序提供理论支持,还是面试中经常被问到的核心面试题之一.因此下面 ...

  7. Java中15种锁的介绍

    作者:搜云库技术团队 原文:https://segmentfault.com/a/1190000017766364 1. Java 中15种锁的介绍 在读很多并发文章中,会提及各种各样锁如公平锁,乐观 ...

  8. 一文带你看懂Java中的Lock锁底层AQS到底是如何实现的

    前言 相信大家对Java中的Lock锁应该不会陌生,比如ReentrantLock,锁主要是用来解决解决多线程运行访问共享资源时的线程安全问题.那你是不是很好奇,这些Lock锁api是如何实现的呢?本 ...

  9. Java进阶(四十二)Java中多线程使用匿名内部类的方式进行创建3种方式

    Java中多线程使用匿名内部类的方式进行创建3种方式 package cn.edu.ujn.demo; // 匿名内部类的格式: public class ThreadDemo { public st ...

随机推荐

  1. gtd好文两篇收藏

    http://www.jianshu.com/p/bf5e8a9761f5 http://blog.sina.com.cn/s/blog_4e0f66b80100m73i.html

  2. map和json之间的转换

    Action中在session中存放了一个map<String,Object>,跳转到a.jsp,a.jsp通过form提交到BAction,BAction可从session中获得map值 ...

  3. Nagios Looking Glass 本地文件包含漏洞

    漏洞名称: Nagios Looking Glass 本地文件包含漏洞 CNNVD编号: CNNVD-201310-682 发布时间: 2013-10-31 更新时间: 2013-10-31 危害等级 ...

  4. Java学习-002-Java初识

    此文主要讲述什么是 Java,以及 Java 常识性知识,方便亲们进一步了解 Java 语言相关的常识. 一.Java 概述 Java 语言是美国 Sun Microsystems 公司于 1995 ...

  5. Opencv + vs2012环境配置

    首先获得最新的Opencv 2.4.10源码:opencv源码下载 一.Opencv环境变量配置 1.将源码安装到制定目录: 2.为Opencv 添加环境变量:计算机-->属性 点击高级系统设置 ...

  6. 在Fedora8上安装jdk-7u25-linux-i586.rpm的步骤

    按:我们身处一个信息爆炸的年代,当有事不决时,打开搜索引擎瞬息间就能得到海量的答案.但是,这未必会让你的问题迎刃而解,因此很多“答案”会把你引向错误的方向,浪费你的时间.希望搜索引擎能有所改进,对明确 ...

  7. ionic一些常见问题及方法

    1.打包的app无法访问互联网及网络资源(比如网页调试可以请求数据,安装到手机上无法请求数据) 添加白名单插件 ionic plugin add https://github.com/apache/c ...

  8. [MVCSharp]MVC# Overview概述

    MVC# Overview概述 Abstract: This article gives an overview of MVC# - a Model-View-Presenter framework ...

  9. mysql参数sql_log_bin

    如果想在主库上执行一些操作,但不复制到slave库上,可以通过修改参数sql_log_bin来实现. 比如想在主库上修改某个表的定义,但是在slave库上不做修改: master mysql> ...

  10. SQL Server 2012大数据导入Oracle的解决方案

    在实际工作中需要把SQL Server中的表导入Oracle.之前尝试过直接用SQL Server的DTS进行都没问题.但这次因为数据量在千万级所以报虚拟内存不足.最后通过SQL Server导出tx ...