`
os586
  • 浏览: 15477 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

主线程怎样从子线程当中得到值?

阅读更多
现在在主线程当中调有了子线程,
子线程中处理数据库的插入操作,调用一次写入数据库一次,每次主线程对子线程调用时写一次数据库!

写完数据库后我需要从主线程当中调用刚才在子线程当中写入库的数据。
但是,因为是子线程,
主线程无法返回子线程当中的数据。
这该怎么办?

还有一种情况就是:当从主线程中调用子线程的结果时,得到的结果,可能因为子线程还没有写入,就调用了,这如何解决?

有没有一种可能就是在子线程当中弹出一个web窗口?当然不能仅挶于IE的
分享到:
评论
11 楼 coolzyt 2007-09-21  
Callable
10 楼 baallee 2007-09-21  
galaxystar 写道
baallee 写道
你可以参考使用CountDownLatch
http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/concurrent/CountDownLatch.html


CountDownLatch是信号量的一种用法之一, 与这里的父子线程调用无关, 楼主的需求中并没说要限制被调线程数量.

并且, CountDownLatch本身也是不适用的, 因为它会处理一次信号量操作, 然后就销毁了.
Semaphore是可以重置的.


CountDownLatch启到阻塞线程而已。获取值还要用其他方法。
9 楼 galaxystar 2007-09-20  
baallee 写道
你可以参考使用CountDownLatch
http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/concurrent/CountDownLatch.html


CountDownLatch是信号量的一种用法之一, 与这里的父子线程调用无关, 楼主的需求中并没说要限制被调线程数量.

并且, CountDownLatch本身也是不适用的, 因为它会处理一次信号量操作, 然后就销毁了.
Semaphore是可以重置的.
8 楼 baallee 2007-09-20  
你可以参考使用CountDownLatch
http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/concurrent/CountDownLatch.html
7 楼 galaxystar 2007-09-19  
os586 写道
现在在主线程当中调有了子线程,
子线程中处理数据库的插入操作,调用一次写入数据库一次,每次主线程对子线程调用时写一次数据库!

写完数据库后我需要从主线程当中调用刚才在子线程当中写入库的数据。


我的理解是, 主线程调用子线程中的插入操作并得到一个插入后记录的序列id, 对吧?

如果不是, 那主线程的数据通过子线程插入后, 为什么还需要从子线程中得到数据, 数据不就是主线程给子线程的吗?

另外, 主线程应该是起一个新的线程来处理插入的吧, 线程间只能起线程或共享资源, 没有调用的说法吧?

并且, 我感觉主线程调用子线程插入, 为什么要在父子两根线程里进行呢?
白白浪费同步开销.

最后, 如果要解决线程间的数据通信, 并且, 主线程要等待子线程, 那么1.5包里的Condition可以胜任.
不用wait-notify是因为notify是随机唤醒主线程的.




6 楼 javachs 2007-09-19  
join
5 楼 coolzyt 2007-09-18  
concurrent包有一个阻塞队列,可以解决你的需求
4 楼 hamlet 2007-09-18  
可以用observer
3 楼 Cappuccino 2007-09-17  
以前碰过过一次类似的,当时是把子线程写成inner class然后直接把结果传递到outer class
2 楼 flashroom 2007-09-17  
主线程调用子线程后 wait
子线程执行完操作后 notifyAll 唤醒主线程
猪线程继续执行读取子线程结果的操作


线程间传递数据可以考虑静态变量
1 楼 孤独勇者 2007-09-17  
可以考虑使用事件机制,当子线程写入后,触发一个事件,并将数据封装到事件里面,而主线程则监听事件并处理。

相关推荐

    多线程显示进度条,子线程耗时10s,主线程在这10s中不停的刷新、显示,进度条界面

    本文将深入探讨如何利用多线程技术实现在子线程中执行耗时操作,同时在主线程中实时更新和显示进度条。 首先,我们要理解线程的概念。线程是操作系统分配CPU时间的基本单位,一个进程可以包含多个线程。在多线程...

    vc中获取一个线程的状态及返回值

    - 在VC++中,主线程可以通过`Joinable`线程类的`join()`成员函数等待子线程结束并获取返回值。 6. **VS2012中的线程支持**: - Visual Studio 2012引入了C++11标准库,其中包含`std::thread`类,提供了一种更现代...

    线程 (C语言)

    在主线程中可以通过`pthread_join`来等待子线程结束,并获取子线程的返回值。 ```c void pthread_exit(void *retval); ``` ```c int pthread_join(pthread_t thread, void **retval); ``` #### 控制线程 为了确保...

    使用C++获取指定线程的CPU使用率

    在C++编程中,获取指定线程的CPU使用率是一项重要的任务,这有助于优化程序性能,监测系统资源消耗。本文将详细介绍如何通过C++来实现这一功能。 首先,我们需要理解CPU使用率的基本概念。CPU使用率是衡量处理器在...

    C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例).rar

    - `Thread.Join` 方法允许主线程等待子线程完成后再继续执行,实现线程间的依赖。 5. **线程优先级** - .NET中的线程有不同优先级,通过`Thread.Priority` 属性设置。但不建议过度依赖优先级,因为操作系统调度...

    如何等待一个已有线程自动结束的VC++代码

    主线程可以通过`GetExitCodeThread`获取线程的退出状态。 7. **线程安全**: 在多线程环境中,对共享资源的操作需要特别小心,以防止数据不一致。可以使用互斥量、临界区等同步对象确保同一时刻只有一个线程访问...

    线程属性理解源码——属性、释放线程

    3. **Join操作**:主程序可以调用`pthread_join()`等待特定线程结束,这可以确保线程的所有资源在主线程继续执行前被正确清理。 4. **守护线程**:守护线程(Daemon Thread)是一种特殊的线程,它们在所有非守护...

    线程同步(4种方法).rar

    例如,主线程可以通过创建事件对象,然后在子线程中等待这个事件,主线程在合适的时候触发事件,以控制子线程的执行。此外,还可以使用C++11及其后的标准库提供的线程、锁和其他并发工具,它们与MFC类库一起,提供了...

    JAVA 多线程的两点误区

    - 使用`join()`可以让主线程等待子线程结束后再继续执行。例如: ```java returnThreadInfo.start(); try { returnThreadInfo.join(); // 等待子线程结束 } catch (InterruptedException e) { e....

    10个VC++多线程操作实例源代码

    在VC++中,主线程默认是UI线程,但也可以通过`AfxBeginThread`函数创建新的UI线程。需要注意的是,不同线程之间的UI操作必须遵循线程安全规则,如使用消息队列或同步对象来避免数据竞争。 4. **如何安全终止线程** ...

    linux系统编程之线程.zip

    exit,则整个进程的所有线程都终止,由于从main函数return也相当于调用exit,为了防止新创建的线程还没有得到执行就终止,我们在main函数return之前延时1秒,这只是一种权宜之计,即使主线程等待1秒,内核也不一定会...

    Win32多线程程序设计_WIN32多线程程序设计学习笔记.zip

    - 主线程退出时,所有子线程也会被强制终止,因此需确保线程安全地完成工作。 - 使用`CloseHandle`关闭线程句柄,释放系统资源。 7. **线程安全**: - 在多线程环境下,对全局变量、静态变量的访问需要特别注意...

    Symbian线程编程

    在Symbian操作系统中,每个进程至少包含一个线程,即所谓的“主线程”,它在进程启动时自动创建。线程是Symbian OS中执行的基本单位,而进程则负责管理线程的生命周期及资源分配。 - **线程执行机制**:Symbian OS...

    操作系统原理实验报告03

    3. 主线程等待:主线程通过调用`WaitForSingleObject()`函数进入阻塞状态,等待信号量变为可用,即子线程执行完毕。这个函数会根据返回值判断等待状态,如`WAIT_OBJECT_0`表示等待成功,`WAIT_TIMEOUT`表示超时,`...

    pthread多线程求pi,linux多线程pthread,C,C++源码.rar

    - 当主线程需要等待某个特定线程完成其工作后才能继续执行时,可以调用pthread_join函数。 - 这个函数将阻塞直到指定的线程结束,然后返回该线程的退出状态。 5. **线程同步**: - 在多线程环境下,数据共享可能...

    多线程编程指南

    - **线程终止**: 等待一个线程完成其执行后再继续执行主线程或其他线程。 **简单线程的示例** - **示例代码**: 展示如何创建和启动一个简单的线程。 **分离线程** - **分离线程**: 分离线程意味着它在终止后不会...

    Android 多线程下载+UI进度条刷新

    在主线程中创建一个Handler实例,重写`handleMessage(Message msg)`方法,根据接收到的消息更新进度条的值。`Message`对象可以携带进度信息,通过`msg.what`区分不同类型的事件,`msg.obj`传递具体数据。 6. 处理...

    并行pthread求π算法

    主线程创建多个子线程,每个子线程在其范围内进行随机点的生成和计数。为了确保线程安全,可能还需要使用互斥锁(mutex)来保护共享资源,如计数变量,避免因多线程同时访问而产生的竞态条件。 完成计算后,所有...

    android 异步操作

    异步任务的主要目标是避免主线程(UI线程)被长时间占用,从而提高应用的响应性和用户体验。Android提供了一个名为`AsyncTask`的内置类,它是实现轻量级异步操作的首选工具。 `AsyncTask`类定义了四个主要的方法,...

Global site tag (gtag.js) - Google Analytics