.net 多线程 调用接口
 情况是这样的,我做了一个定时器,每天某个时间调用接口,发送所有数据。
由于一次数据可能多条 所以做两个分页查询(先说明下 为了让没有数据的时候 不从复调用接口,所以每天只执行一次)

在下面必须添加Thread.Sleep();否则无法按for循环执行。




 public void StartOnHour_GuoQi(object sender, System.Timers.ElapsedEventArgs e)
        {
            //整点发送
            if (e.SignalTime.Hour == hour_start && e.SignalTime.Minute == minute_start && e.SignalTime.Second == 0)
            {
                //执行请求处理
                try
                {
                    var param = new { pageindex = 0, pagesize = 10 };
                    var result_page = InvokeAgentService("OverdueDataCount", param);
                    dynamic page_Json = JKZL.Common.Core.Converts.Json2Dynamic.DynamicConvertHelper.ConvertJson(result_page);

                    //总记录数
                    int total = CommFunction.IntParse(page_Json.Data.TotalCount);
                    //总页数
                    int allpage = 0;

                    /*分页*/
                    if ((total % pageSize) == 0)
                    {
                        allpage = total / pageSize;
                    }
                    else
                    {
                        allpage = (total / pageSize) + 1;
                    }

                    for (int pageIndex = 0; pageIndex < allpage; pageIndex++)
                    {

                        var thread_GuoQi = new Thread(() =>
                        {
                            var parameters = new { pageindex = pageIndex, pagesize = pageSize };
                            var result = InvokeAgentService("GetOverdueData", parameters);

                            dynamic resutlJson = JKZL.Common.Core.Converts.Json2Dynamic.DynamicConvertHelper.ConvertJson(result);


                            if (resutlJson != null && resutlJson.Code == "10000")
                            {
                                foreach (var item in resutlJson.Data.Items)
                                {
                                    //执行代码

                            }
                            else
                            {
                                LogHelp.SysLog("请求返回结果错误结果--接口数据:" + result, "error");
                            }
                        });

                        thread_GuoQi.Start();
                        Thread.Sleep(50);
                    }
                }
                catch (Exception ex)
                {
                    LogHelp.SysLog("执行过期通知处理程序错误" + ex.Message, "error");
                }
            }

        }

1个回答

关键是
JKZL.Common.Core.Converts.Json2Dynamic.DynamicConvertHelper.ConvertJson(result);
这个调用是否线程安全,如果不是,就需要同步。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C++ COM组建多线程调用
如题,CoInitialize(NULL)之后,在单线程当中没有问题。现在我新开一个线程,然后需要在线程当中调用COM中的几个接口,但是提示我是尚未调用CoInitialize,请问各位大神如何在新开的线程当中访问COM接口的函数?谢谢了。
java多线程Thead.start()启动后没有进入run
项目打包传到tomcat后,调用多线程的接口,Thead.start()后没有执行run方法,这是为啥,
nodejs使用co,yield多线程调用出现问题
代码 var express = require('express'); var co = require("co"); var router = express.Router(); var mongoBasedao = require('../dao/mongoBasedao'); var connectionName = "test"; var c1 = 0; var c2 = 0; router.post('/', function (req, res) { test(req, res); }); function test(req, res) { co(function*() { var result = yield mongoBasedao.count({}, connectionName); console.log("count:" + result); c1++; console.log("c1:" + c1); if (result > 10) { var error = { code: 10000, msg: "max" } return yield Promise.reject(error); } var doc = { "name": "wade", "age": 15 }; yield mongoBasedao.insertOne(doc, connectionName); c2++; console.log("c2:" + c2); var success = { code: 0, msg: "success" } return yield Promise.resolve(success); }).then(function (result) { res.json(result); }, function (err) { res.json(err); }); } 用20个线程同时访问接口 打印结果如下: c1:1 c1:2 c1:3 c1:4 c1:5 c1:6 c1:7 c1:8 c1:9 c1:10 c1:11 c1:12 c1:13 c1:14 c1:15 c1:16 c1:17 c1:18 c1:19 c1:20 c2:1 POST /test 200 472.196 ms - 26 c2:2 POST /test 200 172.747 ms - 26 c2:3 POST /test 200 170.743 ms - 26 c2:4 POST /test 200 170.503 ms - 26 c2:5 POST /test 200 174.534 ms - 26 c2:6 POST /test 200 171.628 ms - 26 c2:7 POST /test 200 173.442 ms - 26 c2:8 POST /test 200 172.652 ms - 26 c2:9 POST /test 200 173.263 ms - 26 c2:10 POST /test 200 169.502 ms - 26 c2:11 POST /test 200 171.763 ms - 26 c2:12 POST /test 200 178.748 ms - 26 c2:13 POST /test 200 178.974 ms - 26 c2:14 POST /test 200 176.588 ms - 26 c2:15 POST /test 200 174.458 ms - 26 c2:16 POST /test 200 181.835 ms - 26 c2:17 POST /test 200 181.779 ms - 26 c2:18 POST /test 200 183.717 ms - 26 c2:19 POST /test 200 184.358 ms - 26 c2:20 POST /test 200 184.225 ms - 26 我以为打印结果 应该为 c1 c2 c1 c2 c1 c2 c1 c2 可是结果却是 c1 ... c2... 这个是什么原因 怎么解决这个问题啊
Python+xlwings 多线程操作excel 报错,请问怎么解决
错误内容: pywintypes.com_error: (-2147417842, '应用程序调用一个已为另一线程整理的接口。', None, None)
多线程与线程问题。高分悬赏。
线程池调用部分数据更新不到。因为调用外部接口需要等待时间,所有采用线程加快速度:代码如下:方案一、二 都会出现部分数据没有调用到数据或数据没有更新到数据库 方案一: List<LogisticsTrace> logisticsTracesList=logisticsTraceService.updateLogisticsTraceOffline(params);// 只查询线下的物流信息 if(CollectionUtils.isNotEmpty(logisticsTracesList)){ Map<Long,List<LogisticsTrace>> longListMap=getLogisticsTrace(logisticsTracesList);//一次分一千为一批 List<LogisticsTrace> list = new ArrayList<LogisticsTrace>(); for (Long aLong : longListMap.keySet()) { list=longListMap.get(aLong); } Var var=new Var(); var.setSysVar(SystemConstants.LOGISTICS_TASK);//查询调用配置项 var=varService.getByExample(var); Integer dealSize=100; if(var!=null){ dealSize = Integer.parseInt(var.getSysVal()); } int index = 0; Integer count=(int)Math.ceil(list.size()/dealSize.doubleValue()); ExecutorService ex = Executors.newFixedThreadPool(count); List<Future<List<Object>>> futures = new ArrayList<Future<List<Object>>>(); //分配 for(int i=0;i<count;i++,index+=dealSize){ int start = index; if(start>=list.size()) break; int end = start + dealSize; end = end>=list.size() ? list.size() : end; LogisticsTraceTask logisticsTraceTask=new LogisticsTraceTask(list.subList(start,end),start,end); logisticsTraceTask.setExpressConfigService(expressConfigService); logisticsTraceTask.setLogisticsTraceService(logisticsTraceService); futures.add(ex.submit(logisticsTraceTask)); } try { //处理 for(Future<List<Object>> future : futures){ System.out.println("=============="+future); } } catch (Exception e) { e.printStackTrace(); } } 方案二: List<LogisticsTrace> logisticsTracesList=logisticsTraceService.updateLogisticsTraceOffline(params);// 只查询线下的物流信息 if(CollectionUtils.isNotEmpty(logisticsTracesList)){ Map<Long,List<LogisticsTrace>> longListMap=getLogisticsTrace(logisticsTracesList);//一次分一千为一批 List<LogisticsTrace> list = new ArrayList<LogisticsTrace>(); for (Long aLong : longListMap.keySet()) { list=longListMap.get(aLong); } Var var=new Var(); var.setSysVar(SystemConstants.LOGISTICS_TASK);//查询调用配置项 var=varService.getByExample(var); Integer dealSize=500;//每个线程处理500条数据、可动态传入 if(var!=null){ dealSize = Integer.parseInt(var.getSysVal()); } int index = 0; Integer count=(int)Math.ceil(list.size()/dealSize.doubleValue()); if(count<=0){ count=1; } //分配 for(int i=0;i<count;i++,index+=dealSize){ int start = index; if(start>=list.size()) break; int end = start + dealSize; end = end>=list.size() ? list.size() : end; LogisticsTraceTask logisticsTraceTask=new LogisticsTraceTask(list.subList(start,end),start,end); logisticsTraceTask.setExpressConfigService(expressConfigService); logisticsTraceTask.setLogisticsTraceService(logisticsTraceService); logisticsTraceTask.start(); } }
关于UDP和TCP客户端单例的多线程问题
要求是客户端这边需要一个UDP客户端发送心跳包和一个TCP客户端提供一个可以向TCP服务器发送消息的接口( **要求长连接** )。 需要两个线程来维护这两个单例的客户端。 现在问题就来了,我对于多线程这方面不是特别懂,怎样开启两个线程启动两个客户端,并且TCP客户端的线程开启之后,调用接口之后就可以向服务端发送TCP消息(TCP是长连接,所以这个单例也要一直在运行)。然后就是UDP这块,也需要开启一个线程来持续向服务端发送心跳包。 我用的是MINA写的客户端,但是如何开启分配线程,并且在单例模式下来实现这个功能呢?
关于多线程中的Callable 和 Future接口
Callable中call方法的执行是原子操作吗? "Future的get()方法的调用被阻塞,直到计算完成"是指call方法执行过程中不会被cpu中断,只有call方法执行完毕才会将cpu资源让给其他线程吗? 这是多线程的一种同步机制吗?
JAVA多线程和以下程序的区别
学习多线程了解到 实现线程有两种方式: 1.继承Thread类,重写run方法,在调用start方法。 2.实现Runnable接口,重写run方法。在传给Thread构造器,调用时调用Thread的start方法。 以下这个我也觉得也是在多个一起运行啊,为什么不叫多线程呢,而且并没有实现以上两种方式 public class Thread_setPriority { public static void main(String[] args) { Thread nor = new Thread() { public void run() { for(int i=0;i<10000;i++) { System.out.println("nor"); } } }; Thread max = new Thread() { public void run() { for(int i=0;i<10000;i++) { System.out.println("max"); } } }; Thread min = new Thread() { public void run() { for(int i=0;i<10000;i++) { System.out.println("min"); } } }; max.setPriority(Thread.MAX_PRIORITY); min.setPriority(Thread.MIN_PRIORITY); min.start(); nor.start(); max.start(); } }
C#三层架构怎样方法调用与实现?
定义一个接口:IProducts ->OpenDB()打开数据连接 公共类:SqlHelper 定义一个基类:ProductsObj ->定义一个属性(在方法里连接数据库使用,例如:DbConnection.要调用的公共类名)public SqlHelper DbConnection{get;set;} class Products:IProducts { openDB() //打开数据 } 问题1:怎么调用设置DbConnection的get ,set(目的是为了获取不同的连接字符串,第个用户登录,都使用着不同的数据,但是使用着相同的方法调用(多线程))? 获得数据库连接并且打开以后,我要获取项目: 父类:GetProject()获得项目 子类:Load(),Save(),Delete() 使用时:GetProject().Load().... (有些不理解) 问题2:这种写法怎么实现,怎么调用,有什么好处?
在html中调用ocx组件,其click事件在运行过程中如何改变按钮状态?
我在做一个简单的网页demo,使用html语言调用ocx组件的方式完成前端功能加载和运行,我使用了一个按钮来调用ocx组件。我现在的问题是:我需要通过UI界面来清楚表示ocx组件的运行进度,比如:点击“执行”按钮,在执行过程中,按钮框变成“正在执行...”或者增加某种进度提示信息,当ocx组件执行完成后,按钮状态能够还原。我使用了很多方式,比如: 1、增加进度条; 2、通过定时器 setTimeout(); 3、通过setInterval(); 4、采用多线程Worker;(我使用的是IE浏览器,不支持该接口) 由于调用的ocx运行时间很长,而在网上查阅资料js都是单线程的,所以总是实现不了我要的效果。请问大拿们有什么好的建议? 谢谢!!!!
多线程 java.util.ConcurrentModificationException 问题
<div class="iteye-blog-content-contain" style="font-size: 14px;"> <p><span style="color: #339966;">目标:定义一个Producer类创建Student并添加到studnts集合中,再定义一个Consumer类从studnts集合中取出数据并打印控制台。Producer,Consumer类都实现了Runnable接口。</span></p> <p><span style="color: #339966;">在MainTest类的main方法中创建线程并启动,如下所示:</span></p> <p><span style="color: #ff9900;">        Producer p = new Producer();</span><br><span style="color: #ff9900;">        Thread tp1 = new Thread(p);</span><br><span style="color: #ff9900;">        tp1.start();</span><br><span style="color: #ff9900;">        </span><br><span style="color: #ff9900;">        Consumer c = new Consumer();</span><br><span style="color: #ff9900;">        Thread tc1 = new Thread(c);</span><br><span style="color: #ff9900;">        tc1.start();</span></p> <p><span style="color: #339966;">这个时候,当tc1线程要执行的时候就报java.util.ConcurrentModificationException错误,我本是对线程调用这一块儿不是太明白。请大侠们帮我解决一下儿,请告诉我问啥会出这样的问题。</span></p> <p> </p> <p><span style="color: #ff0000;">具体类如下所示:</span></p> <p> </p> <p> </p> <p><span style="color: #339966;">Student类:一个普通类,其中定义了一个name属性和一个age属性。</span></p> <p><span style="color: #ff9900;">public class Student {</span><br><span style="color: #ff9900;">    private String name;</span><br><span style="color: #ff9900;">    private String age;</span><br><span style="color: #ff9900;">    </span><br><span style="color: #ff9900;">    public String getName() {</span><br><span style="color: #ff9900;">        return name;</span><br><span style="color: #ff9900;">    }</span><br><span style="color: #ff9900;">    public void setName(String name) {</span><br><span style="color: #ff9900;">        this.name = name;</span><br><span style="color: #ff9900;">    }</span><br><span style="color: #ff9900;">    public String getAge() {</span><br><span style="color: #ff9900;">        return age;</span><br><span style="color: #ff9900;">    }</span><br><span style="color: #ff9900;">    public void setAge(String age) {</span><br><span style="color: #ff9900;">        this.age = age;</span><br><span style="color: #ff9900;">    }</span><br><span style="color: #ff9900;">    </span><br><span style="color: #ff9900;">    @Override</span><br><span style="color: #ff9900;">    public int hashCode() {</span><br><span style="color: #ff9900;">        final int prime = 31;</span><br><span style="color: #ff9900;">        int result = 1;</span><br><span style="color: #ff9900;">        result = prime * result + ((age == null) ? 0 : age.hashCode());</span><br><span style="color: #ff9900;">        result = prime * result + ((name == null) ? 0 : name.hashCode());</span><br><span style="color: #ff9900;">        return result;</span><br><span style="color: #ff9900;">    }</span><br><span style="color: #ff9900;">    @Override</span><br><span style="color: #ff9900;">    public boolean equals(Object obj) {</span><br><span style="color: #ff9900;">        if (this == obj)</span><br><span style="color: #ff9900;">            return true;</span><br><span style="color: #ff9900;">        if (obj == null)</span><br><span style="color: #ff9900;">            return false;</span><br><span style="color: #ff9900;">        if (getClass() != obj.getClass())</span><br><span style="color: #ff9900;">            return false;</span><br><span style="color: #ff9900;">        Student other = (Student) obj;</span><br><span style="color: #ff9900;">        if (age == null) {</span><br><span style="color: #ff9900;">            if (other.age != null)</span><br><span style="color: #ff9900;">                return false;</span><br><span style="color: #ff9900;">        } else if (!age.equals(other.age))</span><br><span style="color: #ff9900;">            return false;</span><br><span style="color: #ff9900;">        if (name == null) {</span><br><span style="color: #ff9900;">            if (other.name != null)</span><br><span style="color: #ff9900;">                return false;</span><br><span style="color: #ff9900;">        } else if (!name.equals(other.name))</span><br><span style="color: #ff9900;">            return false;</span><br><span style="color: #ff9900;">        return true;</span><br><span style="color: #ff9900;">    }</span><br><br><span style="color: #ff9900;">    </span><br><span style="color: #ff9900;">    </span><br><span style="color: #ff9900;">}</span></p> <p> </p> <p><span style="color: #339966;">Classroom接口:其中定义了一个名称为studnts的List用于存放Student对象。</span></p> <p><span style="color: #ff9900;">public interface Classroom {<br>    List&lt;Student&gt; studnts = new ArrayList&lt;Student&gt;();<br>}</span></p> <p> </p> <p><span style="color: #339966;">State抽象类:其中定义了一个状态,想用这个对studnts集合的操作进行控制。</span></p> <p><span style="color: #ff9900;">public abstract class State {<br>    boolean state=true;<br>}</span></p> <p> </p> <p><span style="color: #339966;">Producer类:添加Student到studnts中。</span></p> <p><span style="color: #339966;"><span style="color: #ff9900;">public class Producer extends State implements Runnable, Classroom {</span><br><span style="color: #ff9900;">    private int i=0;</span><br><span style="color: #ff9900;">    @Override</span><br><span style="color: #ff9900;">    public void run() {</span><br><span style="color: #ff9900;">        while(true) {</span><br><span style="color: #ff9900;">            </span><br><span style="color: #ff9900;">            if(i&lt;10) {</span><br><span style="color: #ff9900;">                saveStudent();</span><br><span style="color: #ff9900;">            }</span><br><span style="color: #ff9900;">        }        </span><br><span style="color: #ff9900;">    }</span><br><span style="color: #ff9900;">    </span><br><span style="color: #ff9900;">    public synchronized void saveStudent() {</span><br><span style="color: #ff9900;">        </span><br><span style="color: #ff9900;">        if(!state) {</span><br><span style="color: #ff9900;">            try {</span><br><span style="color: #ff9900;">                wait();</span><br><span style="color: #ff9900;">                Thread.sleep(1000);</span><br><span style="color: #ff9900;">            } catch (InterruptedException e) {</span><br><span style="color: #ff9900;">                e.printStackTrace();</span><br><span style="color: #ff9900;">            }</span><br><span style="color: #ff9900;">        }</span><br><span style="color: #ff9900;">        </span><br><span style="color: #ff9900;">        Student s = new Student();</span><br><span style="color: #ff9900;">        s.setName("name"+i);</span><br><span style="color: #ff9900;">        s.setAge("age"+i++);</span><br><span style="color: #ff9900;">        studnts.add(s);</span><br><span style="color: #ff9900;">        </span><br><span style="color: #ff9900;">        System.out.println(Thread.currentThread().getName()+" --- Add Student "+s.getName()+" -- "+s.getAge());</span><br><span style="color: #ff9900;">        </span><br><span style="color: #ff9900;">        state=true;</span><br><span style="color: #ff9900;">        notify();</span><br><span style="color: #ff9900;">    }</span><br><br><span style="color: #ff9900;">}</span><br></span></p> <p><span style="color: #339966;"><span style="color: #ff9900;"><span style="color: #339966;">Consumer类:从</span></span>studnts中取出strut对象并打印出来。</span></p> <p><span style="color: #339966;"><span style="color: #ff9900;">public class Consumer extends State implements Runnable, Classroom {<br>    <br>    @Override<br>    public void run() {<br>        while(true) {<br>            getStudent();<br>        }<br>    }<br>    <br>    public synchronized void getStudent() {<br><br>        if(!state) {<br>            try {<br>                wait();<br>                Thread.sleep(1000);<br>            } catch (InterruptedException e) {<br>                e.printStackTrace();<br>            }<br>        }    <br>            <br>        for(Student s : studnts) {<br>            System.out.println(Thread.currentThread().getName()+" --- get Stduent "+s.getName()+" --- "+s.getAge());<br>        }<br>        <br>        state = false;<br>        <br>        notify();<br>    <br>    }<br><br>}</span></span></p> <p> </p> <p> </p> </div>
Http接口请求问题数据量过大问题
现在遇到了这样一个问题。对方公司调用我们的一个http接口,之前没有考虑到请求数据 量大小的问题,现在发现,在get请求参数中携带的一个list集合,只能存放50条数据,超 过就会报error writing to server的异常。想问一下,我们这边怎么解决大数据量同时发 起请求的问题。可以用多线程吗?
Httpclient4.3 设置请求超时的问题呢
问题描述: 多线程使用httpclient调用接口时,一直保持响应,连接不断开。 增加了线程了,和超时的设置,但是仍然不能保证响应过长,断开连接。 把工具的设置贴上来 ``` private static final CloseableHttpClient httpClient; public static final String CHARSET_GBK = "GBK"; public static final String CHARSET_UTF8 = "UTF-8"; // 将最大连接数增加到 public static final int MAX_TOTAL = 600; // 将每个路由基础的连接增加到 public static final int MAX_ROUTE_TOTAL = 300; //设置超时时间 public static final int REQUEST_TIMEOUT = 2 * 1000; public static final int REQUEST_SOCKET_TIME = 2 * 1000; static { // 设置连接超时 的时间 PoolingHttpClientConnectionManager httpClientConnectionManager = new PoolingHttpClientConnectionManager(); httpClientConnectionManager.setMaxTotal(MAX_TOTAL); httpClientConnectionManager.setDefaultMaxPerRoute(MAX_ROUTE_TOTAL); RequestConfig requestConfig = RequestConfig.custom() .setConnectTimeout(REQUEST_TIMEOUT) .setSocketTimeout(REQUEST_SOCKET_TIME).build(); // 设置重定向策略 LaxRedirectStrategy redirectStrategy = new LaxRedirectStrategy(); httpClient = HttpClients.custom() .setConnectionManager(httpClientConnectionManager) .setDefaultRequestConfig(requestConfig) .setRedirectStrategy(redirectStrategy).build(); } ``` 使用这个工具自己用了两个测试,一个是测试请求时间,一个测试的响应时间,都能正常的抛出错误。 测试1、请求了google的地址,报错:java.net.SocketTimeoutException: Read timed out 测试2、请求一个测试接口,接口中对请求休眠2000ms ``` try { Thread.sleep(3000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } return "hello world"; ``` 运行结果:Caused by: java.net.SocketTimeoutException: connect timed out 但是把这个部署到服务器上后,使用对方的接口,如果对方处理的时间过长,连接就一直不会断开。导致处理速度一直被拖累。 ![图片说明](https://img-ask.csdn.net/upload/201509/18/1442566513_618072.jpg) 请问这种情况能否解决?
apache soap调用第三方webservice短信接口报错(本人小白,求大侠指教)
完整代码如下 ``` /** 接口target url */ private static final String TARGET_URL = "http://duanxin.51fzh.com:5566/XjxSendMsg.asmx?op=ImmediatelySendByMS"; /** 接口xml命名空间*/ private static final String NAMESPACE_URI = "http://tempuri.org/"; /** 短信接口地址 */ private static final String MSG_URL = "http://duanxin.51fzh.com:5566/"; /** 请求调用的方法名称 */ private static final String METHOD_NAME = "ImmediatelySendByMS"; /** 输入参数sendSys为固定值xjxrzweb */ private static final String SEND_SYS = "xjxrzweb"; /** 发送用户:默认系统 */ private static final String SEND_USER = "系统"; /** * 请求短信接口,并返回调用信息 * * @param phoneNumber * 手机号码 * @param content * 模板短信占位符的值,例如@1@=abc, * 如果后期有其他模板需要两个输入参数 就是"@1@=abc,@2@=def" * @param templateNo * 模板短信编号 * @return String success:发送成功 fail:发送失败 */ public static String requestService(String phoneNumber, String content, String templateNo) { String result = ""; try { URL url = new URL(MSG_URL); // 构造Call对象 Call call = new Call(); call.setTargetObjectURI(TARGET_URL); call.setMethodName(METHOD_NAME); call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); // 参数传递 call.setParams(getParameter(phoneNumber, content, templateNo)); // 发出调用 Response resp = call.invoke(url, ""); // 检查应答 if (!resp.generatedFault()) { Parameter ret = resp.getReturnValue(); result = ret.getValue().toString(); } else { Fault fault = resp.getFault(); System.out.println(" Fault Code = " + fault.getFaultCode()); } } catch (Exception e) { e.printStackTrace(); } return result; } /** * 参数组织 * @param phoneNumber * 手机号码 * @param content * 模板短信占位符的值,例如@1@=abc, * 如果后期有其他模板需要两个输入参数 就是"@1@=abc,@2@=def" * @param templateNo * 模板短信编号 * @return Vector<Parameter> * 线程安全性参数结合 */ private static Vector<Parameter> getParameter(String phoneNumber, String content, String templateNo) { Vector<Parameter> params = new Vector<Parameter>(); params.addElement(new Parameter("phoneNumber", String.class, phoneNumber, null)); params.addElement(new Parameter("content", String.class, content, null)); params.addElement(new Parameter("sendSys", String.class, SEND_SYS, null)); params.addElement(new Parameter("sendUser", String.class, SEND_USER, null)); params.addElement(new Parameter("templateNo", String.class, templateNo, null)); return params; } public static void main(String[] args) { System.out.println(requestService("14751608125", "@1@=12121", "JSM41168-0001")); } ``` 错误: SOAPException: faultCode=SOAP-ENV:Protocol; msg=Unsupported response content type &quot;text/html&quot;, must be: &quot;text/xml&quot;. 试了很多方法都没有用
Java中多线程同步锁报无效指针异常是何原因,求大神解答!
/* 需求: 使用lock接口实现商品的生产和销售的动态平衡 思路: 1、创建被共同操作的数据类Resource,并通过多态引用分别创建lock和condition子类对象以及资源的获取和赋值方法 2、创建两个相反操作即生产和销售的类同时实现Runnable接口,并覆盖run方法 3、在主函数中,创建资源对象,并作为共同参数分别传递给生产和销售两个线程实现类的构造函数 4、分别将生产和销售类的对象作为参数,传给两个线程,并各自开启线程 */ package com.horse146; import java.util.concurrent.locks.*; class ProducerConsumerDemo { public static void main(String[] args) //主函数 { Resource r=new Resource(); Producer p=new Producer(r); Consumer c=new Consumer(r); Thread t1=new Thread(p); Thread t2=new Thread(c); t1.start(); t2.start(); } } class Resource //被共同操作的数据类 { String name; int id; boolean flag; Lock lock=new ReentrantLock();//创建锁对象 Condition pro=lock.newCondition(); //用上面创建的锁对象,调用其newCondition方法,创建Condition子类对象,实现对lock锁的等待唤醒操作 Condition con=lock.newCondition(); public void set(String name)throws InterruptedException{//创建赋值方法,并针对等待异常抛出 lock.lock(); try{ while(flag) pro.await();//lock锁下面的Pro线程等待 this.name=name+"----"+id; System.out.println(Thread.currentThread().getName()+"生产出"+this.name); flag=true; con.signal();//lock锁下面的con线程唤醒 } finally{ lock.unlock();//解锁 } } public void get()throws InterruptedException{//创建取值方法,对针对等待异常抛出 lock.lock(); try{ while(!flag) con.await(); System.out.println(Thread.currentThread().getName()+"消费了"+this.name); flag=false; pro.signal();//Pro线程唤醒 } finally{ lock.unlock(); } } } class Producer implements Runnable//生产者类实现Runnable接口 { private Resource r; Producer(Resource r){ this.r=r; } public void run(){ while(true){ try{r.set("商品");} catch(InterruptedException e){} } } } class Consumer implements Runnable//消费者类实现Runnable接口 { private Resource r; Consumer(Resource r){ this.r=r; } public void run(){ while(true){ try{r.get();} catch(InterruptedException e){} } } }
Springboot多个实现类如何根据请求动态切换?
在用springboot开发时,由controller、service接口、service实现组成,一个service接口有多种实现类,需要实现根据不同的请求,例如不同地区的请求,调用不同的实现类,这种实现类和地区的对应有一个配置,我们计划加一个filter从请求中取出IP所在区域,并找出对应的实现类,可以放到某个全局变量或线程变量中,但我们怎么实现让Service注入不同的实现类呢?或者说,我们应如何实现这种需求呢?注意我们的所有service都可能有多个实现类,这个实现类与区域的对应配置是另外维护的。 我的理解spring中Bean是单例,完成装配或注入即不变了,怎么能实现根据请求更换实现类呢?如果能实现,在哪里做呢?我想肯定不应在controller代码中做,不应该每个Controller都加这种判断和选择代码,那么这种判断和选择加到哪里呢?能在filter里做吗?根据所选实现类修改bean的绑定吗?但这样会不会在并发情况下有冲突? 代码是Spring常规的,如下controller: ``` @RestController public class TestController { @Autowired private TestService testService; @RequestMapping(value = "/api/test", method = RequestMethod.GET) public User findOne(@RequestParam(value = "name", required = true) String name) { return testService.findByName(name); } } ``` service接口: ``` public interface TestService { User findByName(String name); } ``` 实现类1: ``` @Service @Primary //默认的实现类 public class TestServiceImpl1 implements TestService { @Autowired private UserDao userDao; public User findByName(String name) { return userDao.findByName(name); } ``` 实现类2: ``` @Service public class TestServiceImpl2 implements TestService { @Autowired private UserDao userDao; public User findByName(String name) { return userDao.findByName(name+"2"); } ``` 1、有人说用多例模式,多例声明在controller还是service实现类呢(我想应该是controller多例吧,service仍然可以作为单例来用)?实现类的选择在哪里动态实现呢(同样不希望在所有Controller中写)?如果用多例能够实现,spring装配还有意义吗?--我觉得不应该是多例,太浪费资源了,能否按照实现类组合创建多个单例(实际就是多例,但不是一个请求创建一个,而是一种组合创建一个)呢?嗯,我觉得这种思路对,但不知从何下手!spring支持这种根据类组合的多实例装配吗? 2、我想了另一种方案,controller统一这样写: ``` @RestController public class TestController { @RequestMapping(value = "/api/test", method = RequestMethod.GET) public User findOne(@RequestParam(value = "name", required = true) String name) { TestService testService=ServiceUtil.getServiceImp(); return testService.findByName(name); } } ``` 提供一个工具类ServiceUtil,静态方法getServiceImp()根据线程变量所对应的类名返回对象,但这种方式是否就不那么spring了,而且每个方法中都要声明,这样好吗? 综上,第一种方案我觉得更好,按照spring的规则写代码,如果有多个实现类,就装配多个controller注入不同的实现类,根据不同请求使用特定的(在哪里判断和选择呢?),但不知如何实现;第二种方法可以实现,但是接口在每个方法中都要声明一遍,感觉不太好。
关于线程上下文类加载器的疑问?
## 看了很多博客都会这样写: 在Java应用中存在着很多服务提供者接口(Service Provider Interface,SPI),这些接口允许第三方为它们提供实现,如常见的 SPI 有 JDBC、JNDI等,这些 SPI 的接口属于 Java 核心库,一般存在rt.jar包中,由Bootstrap类加载器加载,而 SPI 的第三方实现代码则是作为Java应用所依赖的 jar 包被存放在classpath路径下,由于SPI接口中的代码经常需要加载具体的第三方实现类并调用其相关方法,但SPI的核心接口类是由引导类加载器来加载的,而Bootstrap类加载器无法直接加载SPI的实现类,同时由于双亲委派模式的存在,Bootstrap类加载器也无法反向委托AppClassLoader加载器SPI的实现类。在这种情况下,我们就需要一种特殊的类加载器来加载第三方的类库,而线程上下文类加载器就是很好的选择。 ## 我的疑惑: 类加载器的双亲委派机制就是向上委派给父加载器去加载,父加载器不能加载的才让子加载器加载。Bootstrap类加载器无法加载的类会让ext类加载器加载,ext类加载器无法加载的类会让app类加载器加载。。。_**所以为什么Bootstrap类加载器也无法反向委托AppClassLoader加载器SPI的实现类**_??
spring boot + mybtis + java嵌入式sqlite 对dao层加锁的问题。
1.问题描述:项目上需要用到sqlite,逻辑偏业务,对于数据库的访问会偏多,1个并发带有读写动作的接口没问题,2个并发会报错,datasource is lock 2.具体问题描述:sqlite是文件锁,查询可以并发,有写入动作,并且操作未结束时,其他任何的操作都不被允许。 3.处理思路:对dao层增加切面拦截,拦截所有的dao层方法,通过before进行阻塞,after作为dao方法的结束依据。 4.尝试方法: (1)synchronized加锁显然是无法满足,因为它控制不了当前的dao方法是否结束。 (2)LinkedBlockingDeque阻塞队列,失败,报错 Deque full,before中add,after中remove。但实际和预期的不一样,还是会出现争抢。 5.请教思路: 在before中阻断所有调用方法的线程,放行一个线程,知道after结束,然后在before中再放行一个线程,直到无调用线程为止。这样虽然会耽误效率,但是并发量较小,就暂不考虑。
在OLTP环境下,spark使用场景
现在有个OLTP系统,调用的接口规则比较复杂,接口传入数据也比较多,需要1-2秒返回结果,有1000条记录2-3个字段,能否利用spark相关组件作为服务程序,并行处理这些记录,加快响应时间,或在本地多线程并行处理,spark设计主要目的是处理异步模型,对于同步模型处理是否在机制上有时延。
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
【JSON解析】浅谈JSONObject的使用
简介 在程序开发过程中,在参数传递,函数返回值等方面,越来越多的使用JSON。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,同时也易于机器解析和生成、易于理解、阅读和撰写,而且Json采用完全独立于语言的文本格式,这使得Json成为理想的数据交换语言。 JSON建构于两种结构: “名称/值”对的集合(A Collection of name/va...
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
2019年还剩1天,我从外包公司离职了
这日子过的可真快啊,2019年还剩1天,外包公司干了不到3个月,我离职了
我一个37岁的程序员朋友
周末了,人一旦没有点事情干,心里就瞎想,而且跟几个老男人坐在一起,更容易瞎想,我自己现在也是 30 岁了,也是无时无刻在担心自己的职业生涯,担心丢掉工作没有收入,担心身体机能下降,担心突...
计算机网络的核心概念
这是《计算机网络》系列文章的第二篇文章 我们第一篇文章讲述了计算机网络的基本概念,互联网的基本名词,什么是协议以及几种接入网以及网络传输的物理媒体,那么本篇文章我们来探讨一下网络核心、交换网络、时延、丢包、吞吐量以及计算机网络的协议层次和网络攻击。 网络核心 网络的核心是由因特网端系统和链路构成的网状网络,下面这幅图正确的表达了这一点 那么在不同的 ISP 和本地以及家庭网络是如何交换信息的呢?...
python自动下载图片
近日闲来无事,总有一种无形的力量萦绕在朕身边,让朕精神涣散,昏昏欲睡。 可是,像朕这么有职业操守的社畜怎么能在上班期间睡瞌睡呢,我不禁陷入了沉思。。。。 突然旁边的IOS同事问:‘嘿,兄弟,我发现一个网站的图片很有意思啊,能不能帮我保存下来提升我的开发灵感?’ 作为一个坚强的社畜怎么能说自己不行呢,当时朕就不假思索的答应:‘oh, It’s simple. Wait for me for a ...
一名大专同学的四个问题
【前言】   收到一封来信,赶上各种事情拖了几日,利用今天要放下工作的时机,做个回复。   2020年到了,就以这一封信,作为开年标志吧。 【正文】   您好,我是一名现在有很多困惑的大二学生。有一些问题想要向您请教。   先说一下我的基本情况,高考失利,不想复读,来到广州一所大专读计算机应用技术专业。学校是偏艺术类的,计算机专业没有实验室更不用说工作室了。而且学校的学风也不好。但我很想在计算机领...
复习一周,京东+百度一面,不小心都拿了Offer
京东和百度一面都问了啥,面试官百般刁难,可惜我全会。
Java 14 都快来了,为什么还有这么多人固守Java 8?
从Java 9开始,Java版本的发布就让人眼花缭乱了。每隔6个月,都会冒出一个新版本出来,Java 10 , Java 11, Java 12, Java 13, 到2020年3月份,...
达摩院十大科技趋势发布:2020 非同小可!
【CSDN编者按】1月2日,阿里巴巴发布《达摩院2020十大科技趋势》,十大科技趋势分别是:人工智能从感知智能向认知智能演进;计算存储一体化突破AI算力瓶颈;工业互联网的超融合;机器间大规模协作成为可能;模块化降低芯片设计门槛;规模化生产级区块链应用将走入大众;量子计算进入攻坚期;新材料推动半导体器件革新;保护数据隐私的AI技术将加速落地;云成为IT技术创新的中心 。 新的画卷,正在徐徐展开。...
轻松搭建基于 SpringBoot + Vue 的 Web 商城应用
首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API ...
讲真,这两个IDE插件,可以让你写出质量杠杠的代码
周末躺在床上看《拯救大兵瑞恩》 周末在闲逛的时候,发现了两个优秀的 IDE 插件,据说可以提高代码的质量,我就安装了一下,试了试以后发现,确实很不错,就推荐给大家。 01、Alibaba Java 代码规范插件 《阿里巴巴 Java 开发手册》,相信大家都不会感到陌生,其 IDEA 插件的下载次数据说达到了 80 万次,我今天又贡献了一次。嘿嘿。 该项目的插件地址: https://github....
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
程序员如何通过造轮子走向人生巅峰?
前言:你所做的事情,也许暂时看不到成果。但不要灰心,你不是没有成长,而是在扎根。 程序员圈经常流行的一句话:“不要重复造轮子”。在计算机领域,我们将封装好的组件、库,叫做轮子。因为它可以拿来直接用,直接塞进我们的项目中,就能实现对应的功能。 有些同学会问,人家都已经做好了,你再来重新弄一遍,有什么意义?这不是在浪费时间吗。 殊不知,造轮子是一种学习方式,能快速进步,造得好,是自己超强能力的表...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
Idea 中最常用的10款插件(提高开发效率),一定要学会使用!
学习使用一些插件,可以提高开发效率。对于我们开发人员很有帮助。这篇博客介绍了开发中使用的插件。
立即提问