1. 【Java线程类问题写一个线程类MyThread,该线程实现了Runnable
interrupt(), stop(), suspend() 都不推荐再用,而是应该让 run 方法正常地退出,如果你打算让它循环,就在 run() 方法内用一个循环(比如 while (indicator) 循环让它在标记位 indicator 改变后退出来)。
通过interrupt 对比那个线程是不是当前线程,这种做法很怪异,不是在 java 中用 == 就可以比较的么 thread == Thread.currentThread() 就是当前线程,再说了,怎么会是当前线程来决定当前线程的命运呢?管理线程应该和工作线程分开才合适。现在这个代码是先尝优雅地退出,之后,强制退出,这说明作者不确信他写的代码能正常地退出,那么什么情况下不能正常地退出呢,如果是 socket 阻塞了,那我们给一个 timeout,如果是数据库阻塞了,我们允许强制退出,如果不是这种外界资源导致的阻塞,我们的程序就应该保证能正常地退出,否则就是质量问题。
另外,interrupt 之后出现的异常完全不应该 e.printStackTrace() 因为你应该确信错误是什么,就直接打印出一段类似“线程未在指定时间内退出,强制终止它”的消息。interrupt() 之后再 join() 看起来不适合,不过,可能只是为了保险起见。
反正看不去哪里不确信。如果你想等几个线程都完成之后你的主线程才继续,那么代码应该时先把工作线程都启动,全都启动之后再跑循环 workerThreadX.join() 把几个工作线程都调用一次 .join(),(注意先把所有线程启动,再来 join),那些工作线程应该自己根据标记位来退出,或者工作完成了后退出。
2. C语言怎么写线程代码
通常使用CreateThread函数来创建新的线程.(Unix下使用pthread_create函数)
首先指出,线程与线程之间,是并列关系,不会存在"父子线程"的概念.
在Windows平台下,CreateThread函数包含在 Windows.h 文件内,包含此文件即可正常使用.
以下为CreateThread函数的声明:
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,//指向安全性属性描述结构体的
//指针,通常可以忽略的.
SIZE_T dwStackSize,//指定新线程初始的栈大小,若不关心,可以用0填充,来要求使用
//默认值
LPTHREAD_START_ROUTINE lpStartAddress,//用来充当线程的函数的指针.
LPVOID lpParameter,//要传递给函数的参数,这个值本身就是那个参数,而不是参数的地址
DWORD dwCreationFlags,//创建的方式,0表示正常,创建后立即开始运行
LPDWORD lpThreadId//用来接受函数反馈的线程ID的指针.
);
用来充当新的线程的函数格式:
DWORD WINAPI ThreadProc(LPVOID);
CreateThread函数若成功了,返回新线程的句柄,若失败了,则返回NULL.
若用CREATE_SUSPENDED填充dwCreation Flags则创建的线程先挂起来,并不直接开始运行,要用ResumeThread函数恢复线程,才能继续运行.
3. C# 如何写多线程程序
我用的是VS2005,
线程的实现可以用种方法..目前我知道的.一种是安全调用,一种是不安全调用
先说不安全调用
先加入命名空间 using System.Threading;
然后在要用新线程运行的方法中加入
Thread a=new Thread(new ThreadStart(sayhi());
然后用a.start();开始新的线程,执行的代码放到
private void sayhi()
{
Messagebox.Show("Hello New Threading");
}
这样运行的话,就算关了主界面,这个对话框也不会消失
如果想在这个新进程中改变主程序中的界面,则需要在改变前加入一句话
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
这样就可以在新的进程中操作主窗体的控件,比如label1.Text="Hello";
另一种方法是安全调用,不过VS2005中提供的BackgroundWorker,可以很方便的进行调用线程,同样,想通过新进程访问主程序的话 也是需要加入
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
BackgroundWorker控件很方便,
托一个到设计界面里,双击这个控件,然后会生成一个private void backgroundWorker1_DoWork(object sender,EventArgs e)事件
把新线程要做的工作写在下边的代码里
然后通过this.backgroundWorker1.RunWorkerAsync();调用DOWORK的代码
而且还可以用private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)可以做的收尾工作.
在BackgroundWorker的方法列表中有
4. java中线程编程代码怎么写啊
线程用到Thread或者Runnable接口(Thread也操作了Runnable接口)继承了Thread类后需要重载其run方法,在方法里写你需要完成的事情,开始线程是调用其start方法。
操作Runnable接口必须实现其run方法,在方法里写你需要完成的事情,Runnable接口没有start方法,所以启动线程还是需要依靠Thread类 new Thread(Runnable runnable).start();一般项目中多是操作接口,因为类只能单继承,接口可以操作多个。
5. java中线程编程代码怎么写啊
线程用到Thread或者Runnable接口(Thread也操作了Runnable接口)
继承了Thread类后需要重载其run方法,在方法里写你需要完成的事情,开始线程是调用其start方法。
操作Runnable接口必须实现其run方法,在方法里写你需要完成的事情,Runnable接口没有start方法,所以启动线程还是需要依靠Thread类 new Thread(Runnable runnable).start();
一般项目中多是操作接口,因为类只能单继承,接口可以操作多个。