java线程问题,为什么我的程序得不到想要的结果(线程1先运行结束,才到线程2运行,可结果不是这样)

java线程问题,为什么我的程序得不到想要的结果(线程1先运行结束,才到线程2运行,可结果不是这样),第1张

优先级不准?你理解什么叫线程优先级吗?

线程你只要不告诉它等待,它是不会等其他线程先结束的。什么是线前羡程,线程天生就是并行运行分支租悔宏,哪怕你给它最低的优先级,那它也只是在同一时刻相比其他线程被执行的几率较低,而完全没有道理停下来等待。

如果你要让它等待,有很弊册多办法,例如,最简单:

public class Test extends Thread {

private static Object lock = new Object()

public static void main(String[] args) {

try {

Test p1 = new Test()

Test p2 = new Test()

p1.setName("线程1")

p2.setName("线程2")

p1.setPriority(MAX_PRIORITY)

p2.setPriority(MIN_PRIORITY)

p1.start()

while (p1.getState() != Thread.State.TERMINATED)

p2.start()

} catch (Exception e) {

e.printStackTrace()

}

}

public void run() {

for (int i = 0i <= 5i++) {

System.out.println(getName() + " ")

}

}

}

虽然有主线程这一说法(调用main的线程),但对于WINDOWS来说,所有线程都是平等的,并没有主次之分,因此也不会提供获得主线程的函数弯搭早码或方法.但要找到调用main的线程倒是有些方法可行的,虽然不一定正确.

1,获取线程的创建时间,通常情况下主线程的创建时间是最早的

2,如果是GUI程序,可以通过GetWindowThreadProcessId获取窗口的线程,通常程序员都使用主线程创建窗口

3,其中有一种是线程堆栈查找main函数的地址,如果发现了那就是所谓的主线程.

其实这个问题跟窗口一样,对于程序员来说一个进埋睁拿程有主窗口,但对于WINDOWS来说只有父窗口和子窗口的概念(但据<WINDOWS核心编程>里的说法,WINDOWS连线程的父子关系也不保存),所以也没用获取主窗口的API

MSDN关于AfxGetMainWnd 函数的说明:

If your application is an OLE server, call this function to retrieve a pointer to the active main window of the application instead of directly referring to the m_pMainWnd member of the application object.

你可以搭宏去看一下具体的;

在这里我推荐一个方法,

你将IDC_LIST1控件添加到了一个对森枝银话框中,那么我假设与这个对话框绑定的类为CXXXDlg

让线程函数带一个此宴参数,参数类型为 你要设置文本的 对话框类的指针比如 CXXXDlg *pDlg

创建线程时,若是在CXXXDlg的成员函数中创建,那么直接传入这个对话框的this指针;

否则先实例化CXXXDlg类的一个对象 CXXXDlg Dlg;

再传入Dlg.this 指针

在线程函数的while循环中,调用 pDlg->SetDlgItemText(IDC_LIST1,strTime)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12305944.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存