关于线程中处理数据的问题,求教

问题描述

publicvoidrun(){ThreadthisThread=Thread.currentThread();while(blinker==thisThread){try{for(inti=0;i<lists.size();i++){try{url=newURL(lists.get(i).getAddress());httpurlconnection=(HttpURLConnection)url.openConnection();httpurlconnection.setConnectTimeout(1000);if(httpurlconnection.getResponseCode()==200){lists.get(i).setStatut("正常链接");}else{lists.get(i).setStatut("未能链接");}}catch(Exceptione){lists.get(i).setStatut("无效链接");}finally{if(httpurlconnection!=null)httpurlconnection.disconnect();}}System.out.println("线程中目前数据"+lists.size());Thread.sleep(RUN_TIME);}catch(Exceptione){//TODO:handleexception}}}

我在线程中操作list,但是如果数据一多,后面有些数据会不会处理不到?这个地方需要如何改进啊?线程轮训时间现在是1分钟,数据比较少。

解决方案

解决方案二:
没人知道吗?
解决方案三:
数据处理完后线程关闭不就行了嘛
解决方案四:
楼书可以一直运行一个线程,知道数据处理完成,参见生产者/消费者
解决方案五:
引用2楼jycjycfy的回复:

数据处理完后线程关闭不就行了嘛

不是的,这是一个后台检测的程序,线程是不能关闭的。
解决方案六:
引用3楼applerockhool的回复:

楼书可以一直运行一个线程,知道数据处理完成,参见生产者/消费者

你的意思是再开一个线程去处理数据吗?
解决方案七:
这个就看你线程结束的条件是怎么写的。如果按照生产者/消费者模式是不会出现线程结束了还没处理完这种情况
解决方案八:
是不是这个意思?classThreadDemo1{publicstaticvoidmain(String[]args){TestThreadt=newTestThread();newThread(t).start();newThread(t).start();newThread(t).start();newThread(t).start();}}classTestThreadimplementsRunnable{privateList<String>l;publicTestThread(){this.l=newArrayList<String>();for(inti=0;i<100;i++){l.add("address"+String.valueOf(i));}}publicvoidrun(){synchronized(this){while(l.size()>0){System.out.println(Thread.currentThread().getName()+"iscalling"+l.remove(0));this.notifyAll();try{this.wait();}catch(InterruptedExceptione){e.printStackTrace();}}}}}

时间: 2024-07-31 06:40:15

关于线程中处理数据的问题,求教的相关文章

ios-在背景线程中处理数据

问题描述 在背景线程中处理数据 我写了一方法如下: - (BOOL)shouldDoSomeWork { BOOL result = // here I need do hard work with data in background thread and return result so main thread should wait until the data is calculated and then return result; return result;} 如何实现? 解决方案

线程间共享数据无需竞争

原文 地址  作者  Trisha   译者:李同杰 LMAX Disruptor 是一个开源的并发框架,并获得2011 Duke's程序框架创新奖.本文将用图表的方式为大家介绍Disruptor是什么,用来做什么,以及简单介绍背后的实现原理. Disruptor是什么? Disruptor 是线程内通信框架,用于线程里共享数据.LMAX 创建Disruptor作为可靠消息架构的一部分并将它设计成一种在不同组件中共享数据非常快的方法. 基于Mechanical Sympathy(对于计算机底层硬

Android——使用Volley+fastJson在新线程中读取网络接口获取天气信息

一,关于Volley            其实最初对于网络数据的访问,我是没想到要用框架的,使用HttpURLConnection或者HttpGet or HttpPost都可以实现.但是why? why I have to use Volley?        Before Volley:                class HttpURLConnection_post extends Thread{ @Override public void run() { //设置请求的路径 St

使用Exchanger实现两个线程之间的数据交互

在看Jetty源码中的EndPointTest类,对EndPoint的测试,我的思路是:1. 建立一个连接(创建ServerSocket实例,一般还会给定一个端口,其实可以bind(null)以让操作系统分配一个可用端口),新启动一个线程,在新线程中监听给定端口(调用accept方法).2. 发送客户端请求(创建一个Socket实例,并向该Socket写入请求数据).3. 在接收端读取数据,验证写入的请求和接收到的数据相同. 在以上流程实现中,accept方法返回的接收端Socket需要传给主线

怪问题,求高手帮解决!!多线程中丢数据的问题

问题描述 [背景介绍]:本人原来开发了一套多通道数据采集分析系统,分析软件开发环境是VS2010,.Net4.0,使用C#语言编写,配合NImeasurementstudio2010做图形显示,另外还用了DXPerience10的控件.多通道采集器通过UDP协议与软件进行数据通讯,软件和采集器有一套完善的通讯协议,通讯过程是这样的,软件发送数据请求包,采集器将所有24通道数据发送给软件(24包).为保证数据完整性,软件存储策略是收到全部数据后才同意存储,否则丢弃数据,等到下一帧数据.该软件也开发

java web应用中新起一个线程 在线程中怎么获取系统登录的数据

问题描述 java web应用中新起一个线程 在线程中怎么获取系统登录的数据 java web应用中新起一个线程 在线程中怎么获取系统登录的数据,系统登录用的是Spring Secrity 解决方案 可以使用缓存,自己写一个缓存类.或者使用Redis.

代码-求助各位大神LIstfragment中,分线程获取数据后刷新界面崩溃,用分线程加载数据后

问题描述 求助各位大神LIstfragment中,分线程获取数据后刷新界面崩溃,用分线程加载数据后 如题:代码如下,要在viewpager中的一个fragment中加载一个listview,用分线程加载数据后,handleMessage给成员变量的集合赋值后,notify,会直接崩溃 /** 报警图片 */ public class AlarmPhotoFragment extends ListFragment { private int mType = 0; private ListView

java-在android中把数据从一个线程发送到另一个线程

问题描述 在android中把数据从一个线程发送到另一个线程 我在Android UI线程执行一些程序,有一个很耗时的程序,所以我把它放在另一个线程中. 1.在这个子线程运行后,UI线程会开始执行某个程序 2.这个程序将会在子线程中创建一些数据 这是我的解决方案: Car car; public void onResume(){ super.onResume(); Thread t = new Thread(){ car = new Car(); car.takePetrol; //take c

如何在线程中返回拿到的数据?

问题描述 如何在线程中返回拿到的数据? 我现在通过调用一个方法去发socket请求来获取服务端的数据. 在这个方法中启一个线程去处理. 我碰到的问题是如何在线程中返回拿到的数据 解决方案 楼主的问题其实是线程间通讯问题: 基本上有3种方法,当然要注意线程同步问题: 1.全局数据 2.全局变量 3.全局数据结构 4.线程间通信的参数 5.文件句柄 6.匿名管道和命名管道 7.消息队列 解决方案二: 如果要在方法退出前等待线程结束并拿到结果,可以在线程启动后使用wait(),待线程得到服务器端的数据