2 hello java hello_java_ 于 2014.09.28 16:51 提问

关于Java多线程的问题

有两个类,一个主类,一个线程类。我主类里面有一个变量,需要线程类去处理。有什么办法保证我的线程类里面处理完之后 主类再使用这个变量么?
简化的例子:
主类

public class A {
public static List<String> items = new ArrayList<String>();

public static void main(String[] args){
    for(int time = 0; time < 3; time++){
        new B().start();
    }
    for(int i = 0; i<items.size();i++){
        System.out.print(items.get(i) + "\n");
    }
}

}

线程类

public class B extends Thread{

@Override
public void run(){
    //比较复杂的数据处理
    for(int i = 0; i < 5; i++) {
        A.items.add("" + i);
    }
}

}

请问要怎么保证所有的线程都跑完,再使用主类变量?当然不要去停线程。谢谢。

3个回答

tianyutaizi
tianyutaizi   2014.09.28 17:38

CountDownLatch 可以实现

简单点来讲可以设置一个信号量,主线程不断监测这个信号量,不满足条件就一直阻塞,直到满足条件。信号量在多线程中修改

z599245299
z599245299   2014.10.09 15:10

线程同步,加上同步锁

david_csu
david_csu   2015.12.12 03:44
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
java多线程--几个多线程面试题小结
转载来源:http://www.cnblogs.com/fingerboy/p/5352880.html 面试题1:编写程序实现,子线程循环10次,接着主线程循环20次,接着再子线程循环10次,主线程循环20次,如此反复,循环50次. package com.wang.reflect; //编写功能类,实现子线程和主线程的功能 class Function{ private
1 那些年遇到过的面试题 - 40个多线程问题总结
面试中经常碰到的多线程问题。
多线程的40个面试题总结(上)
周末在微信公共号看到一篇关于《线程的40个道题》的文章,由于今年工作之前参加过几次面试,所以觉得这篇文章总结的很好 只要读者朋友们耐心看完,并且在阅读过程中遇到自己疑惑的地方时自己能动手查一查做一做,我相信以后遇到很多关于线程上的问题都会迎刃而解。 打算用两个部分来写,第一便于读者阅读,第二谁也不能一口吃个胖子,相信我有的知识是需要时间的积累才能获得的,没有时间的积累谁也不能成为专家,只有时间
面试题之---java多线程
(一)多线程1,概念介绍      一般一个应用至少一个进程,一个线程,线程是进程的一个实体,是CPU调度和分派的基本单位.最简单的比喻多线程就像火车的每一节车厢,而进程则是火车。车厢离开火车是无法跑动的,同理火车也不可能只有一节车厢。    在操作系统中,线程是最小的调度单元,同时又是一种受限的资源,所以不可能无限制的产生,它的创建和销毁都是比较耗性能的.    因此,要尽量使用线程池,来管理线...
关于Java的线程问题总结
不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题。Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎。大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发、调试、优化经验,所以线程相关的问题在面试中经常会被提到。 在典型的Java面试中, 面试官会从线程的基本概念问起, 如:为什么你需要使用线程, 如何创建线程
15个顶级Java多线程面试题及回答 / Java程序员面试中的多线程问题
1)现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行? 这个线程问题通常会在第一轮或电话面试阶段被问到,目的是检测你对”join”方法是否熟悉。这个多线程问题比较简单,可以用join方法实现。 2)在Java中Lock接口比synchronized块的优势是什么?你需要实现一个高效的缓存,它允许多个用户读,但只允许一个用户写,以此来保持它的完整性
关于线程和多线程,JAVA高并发程序设计
关于线程和多线程,面试里你所要知道的一切(一)主要整理一些关于线程的知识,尽量做到言简意赅,面试的时候用。线程前段时间找工作,很多次问到关于线程的问题,回答的时候就开启背书模式:线程是轻量级的进程,是程序执行的最小单位….现在想想,面试官要听的肯定不是这些,如果只知道这些,那还怎么守护达康书记的GDP。面试官:来说下线程吧。 程序猿:线程用的是Thread这个类和Runnable这个接口… 面试
Java多线程中的10个面试要点
Java技术栈 2016-10-30 16:04 1、进程与线程区别以及线程相关概念 进程就是运行中的程序,每个进程占用独自的内存空间;线程属于进程,一个进程可以有一个或多个线程,这些线程共享这个进程的内存或系统资源,线程的切换比进程切换的负担要小。一个Java应用总是从main()方法开始运行,mian()方法运行在一个线程内,它被称为主线程。多线程的最终目的是尽可能的利用cpu资源
一例JAVA多线程访问卡死的现象
  最近适配摄像头,自然的就要接收、传递音频视频数据。而这些数据是非常频繁的,如果每次都新建缓冲区,一个是影响性能,另外也显得自己水平太低。怎么办?上缓存。  音频、视频当然要分开缓存。代码很类似,自然的吾就新建了一个类,  起名?Manager显然不合适,叫Worker最好。Queue、Cache都不是太适合。  数据队列LinkedBlockingDeque,缓存用ConcurrentLink...
Java面试题——多线程高并发(long time service)
什么是线程? 线程是进程中的一个实体,是被系统独立调度和分派的基本单位,它被包含在进程之中,是进程中的实际运作单位。线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。线程也有就绪、阻塞和运行三种基本状态。我们通过多线程编程,能更高效的提高系统内多个程序间并发...