java多线程访问数组抽奖,加了个数组,怎么弄?有思路吗

如何实现一个线程安全的NSMutabeArray,以保证多个线程对数组操作(遍历,插入,删除)的安全? - 知乎43被浏览3631分享邀请回答1添加评论分享收藏感谢收起@interface ThreadSafetyArray : NSObject {
NSMutableArray* _array;
- (void)addObject:(NSObject*)obj;
- (void)walk:(void (^)(NSObject*))walkfun;
@implementation ThreadSafetyArray
- (id)init {
self = [super init];
if (self) {
_array = [[NSMutableArray alloc] init];
return self;
- (void)addObject:(NSObject*)obj {
@synchronized(self) {
[_array addObject:obj];
- (void)walk:(void (^)(NSObject*))walkfun {
@synchronized(self) {
for (NSObject* obj in _array) {
walkfun(obj);
6添加评论分享收藏感谢收起更多与世界分享知识、经验和见解2012年8月 总版技术专家分月排行榜第三2012年7月 总版技术专家分月排行榜第三
2014年8月 高性能开发大版内专家分月排行榜第一2013年11月 高性能开发大版内专家分月排行榜第一2012年12月 Java大版内专家分月排行榜第一2012年11月 Java大版内专家分月排行榜第一2012年10月 Java大版内专家分月排行榜第一2012年9月 Java大版内专家分月排行榜第一2012年8月 Java大版内专家分月排行榜第一2012年7月 Java大版内专家分月排行榜第一2012年6月 Java大版内专家分月排行榜第一2012年5月 Java大版内专家分月排行榜第一2012年4月 Java大版内专家分月排行榜第一2012年3月 Java大版内专家分月排行榜第一2012年2月 Java大版内专家分月排行榜第一2012年1月 Java大版内专家分月排行榜第一
2011年4月 Java大版内专家分月排行榜第二2010年8月 Java大版内专家分月排行榜第二2010年5月 Java大版内专家分月排行榜第二2008年2月 Java大版内专家分月排行榜第二2007年7月 Java大版内专家分月排行榜第二
2011年2月 Java大版内专家分月排行榜第三2010年9月 Java大版内专家分月排行榜第三2008年9月 Java大版内专家分月排行榜第三2008年1月 Java大版内专家分月排行榜第三2007年11月 Java大版内专家分月排行榜第三2007年9月 Java大版内专家分月排行榜第三
2012年3月 Java大版内专家分月排行榜第三
2015年5月 Java大版内专家分月排行榜第二2013年5月 Java大版内专家分月排行榜第二
2011年5月 Java大版内专家分月排行榜第三2011年1月 Java大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。多线程对数组开展求和 - 编程当前位置:& &&&多线程对数组开展求和多线程对数组开展求和&&网友分享于:&&浏览:61次多线程对数组进行求和
需求: 1:对一个大数组进行求和。 2:需要使用多线程实现。 思路: 1:将大数组根据线程的数量进行拆分。 2:每个线程对数组的部分元素进行求和。 3:等待所有线程执行完毕,返回结果。 说明: 在论坛中看到有一个帖子是使用concurrent包实现的,我这个例子没有使用concurrent包。发现也挺简单。 代码如下所示:
* 多线程求和
* @author Administrator
public class ThreadsSum {
static public long sum(final int[] array) {
if (array == null || array.length == 0) {
throw new IllegalArgumentException("array length must greater than 0");
final RuntimeData rd = new RuntimeData();
int threadCount = rd.getThreadCount(array);
System.out.println("thread count:" + threadCount);
//每线程计算的数组元素个数
final int lenPerThread = array.length / threadC
System.out.println(lenPerThread);
for (int i = 0; i & threadC i++) {
final int index =
new Thread() {
public void run() {
long s = 0;
int start = index * lenPerT
int end = start + lenPerT
for (int j = j & j++) {
s += array[j];
synchronized (rd) {
rd.finishThreadCount++;
// System.out.println("thread[" + getName() + "]
finished,sum:" + d.sum);
}.start();
//余下的array元素
int remain = array.length % threadC
System.out.println("remain element count:" + remain);
long s = 0;
for (int i = array.length - i & array. i++) {
s += array[i];
synchronized (rd) {
while (rd.finishThreadCount != threadCount) {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
return rd.
public static void main(String[] args) {
int[] array = new int[15];
long s = System.currentTimeMillis();
long sum = 0;
for (int i = 0; i & array. i++) {
array[i] =
sum += array[i];
long start = System.currentTimeMillis();
System.out.println(start - s);
long sum2 = sum(array);
long end = System.currentTimeMillis();
long cost = end -
System.out.println(sum);
System.out.println(sum2 == sum);
System.out.println("sum:" + sum + ";equals:" + (sum2 == sum) + ";cost:" + cost);
* 保存运行时的相关数据
class RuntimeData {
//默认线程数
int defThreadCount = 17;
//已经执行完成的线程数
int finishThreadC
* 根据数据长度获取线程数,线程数不会大于数组的长度。
* @param array
public int getThreadCount(int[] array) {
if (array.length & defThreadCount) {
return array.
return defThreadC
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有2017年2月 总版技术专家分月排行榜第三
2017年5月 .NET技术大版内专家分月排行榜第一2017年4月 .NET技术大版内专家分月排行榜第一2017年3月 .NET技术大版内专家分月排行榜第一2017年2月 .NET技术大版内专家分月排行榜第一2016年10月 .NET技术大版内专家分月排行榜第一2016年8月 .NET技术大版内专家分月排行榜第一2016年7月 .NET技术大版内专家分月排行榜第一
2017年2月 总版技术专家分月排行榜第三
2017年5月 .NET技术大版内专家分月排行榜第一2017年4月 .NET技术大版内专家分月排行榜第一2017年3月 .NET技术大版内专家分月排行榜第一2017年2月 .NET技术大版内专家分月排行榜第一2016年10月 .NET技术大版内专家分月排行榜第一2016年8月 .NET技术大版内专家分月排行榜第一2016年7月 .NET技术大版内专家分月排行榜第一
2017年2月 总版技术专家分月排行榜第三
2017年5月 .NET技术大版内专家分月排行榜第一2017年4月 .NET技术大版内专家分月排行榜第一2017年3月 .NET技术大版内专家分月排行榜第一2017年2月 .NET技术大版内专家分月排行榜第一2016年10月 .NET技术大版内专家分月排行榜第一2016年8月 .NET技术大版内专家分月排行榜第一2016年7月 .NET技术大版内专家分月排行榜第一
2012年12月 .NET技术大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 c 多线程 数组 的文章

 

随机推荐