if (bReadIsStart2 == FALSE)
thread2 = CreateThread(NULL,0,ThreadFun1,0,0,&ThreadID2); // 创建子线程的子线程
bReadIsStart2 = TRUE;
return 0;
int main()
BOOL bReadIsStart1 = FALSE;
BOOL bReadIsStart2 = FALSE;
HANDLE thread1;
HANDLE thread2;
DWORD ThreadID1;
DWORD ThreadID2;
int a = 1;
int b = 2;
while (1) // 创建两个线程进行验证
if (bReadIsStart1 == FALSE)
thread1 = CreateThread(NULL,0,ThreadFun,(LPVOID)(&a), 0,&ThreadID1); // 创建线程
bReadIsStart1 = TRUE;
if (bReadIsStart2 == FALSE)
thread2 = CreateThread(NULL,0,ThreadFun,(LPVOID)(&b),0,&ThreadID2); // 创建线程
bReadIsStart2 = TRUE;
Sleep(2000);
cout<<"main "<< endl;
CloseHandle(thread1);
CloseHandle(thread2);
return 0;
} // 子线程中启动的子线程
while (1)
cout<<"Subfunctions "<< endl;
Sleep(100);
return 0;
DWORD WINAPI ThreadFun(LPVOID lparam) // 主线程中启动的子线程
BOOL bReadIsStart2 = FALSE;
HANDLE thread2;
DWORD ThreadID2;
while (1)
int* a = (int*)lparam;
cout<<"Functions " << *a << endl;
Sleep(1000);
if (bReadIsStart2 == FALSE)
thread2 = CreateThread(NULL,0,ThreadFun1,0,0,&ThreadID2); // 创建子线程的子线程
bReadIsStart2 = TRUE;
return 0;
int main()
BOOL bReadIsStart1 = FALSE;
BOOL bReadIsStart2 = FALSE;
HANDLE thread1;
HANDLE thread2;
DWORD ThreadID1;
DWORD ThreadID2;
int a = 1;
int b = 2;
while (1) // 创建两个线程进行验证
if (bReadIsStart1 == FALSE)
thread1 = CreateThread(NULL,0,ThreadFun,(LPVOID)(&a), 0,&ThreadID1); // 创建线程
bReadIsStart1 = TRUE;
if (bReadIsStart2 == FALSE)
thread2 = CreateThread(NULL,0,ThreadFun,(LPVOID)(&b),0,&ThreadID2); // 创建线程
bReadIsStart2 = TRUE;
Sleep(2000);
cout<<"main "<< endl;
CloseHandle(thread1);
CloseHandle(thread2);
return 0;
验证结果,各个线程之间的运行时相互独立的,只按照本身的时间线来走,不受别的线程的影响。主线程休眠与子线程无关。
Android中的程序入口在ActivityThread.main()方法。创建应用进程也包含了创建
主线程
的工作。Android中提供了一些有用使用
子线程
封装的类,如:HandlerThread,封装了Handler机制的实现;
AsyncTask,用于执行轻量级的异步任务,并最终可以将结果更新到
主线程
中;
IntentService,用于执行高优先的后台任务。
在实现一个springboot日志
记录
的aop方法
但是为了防止日志
记录
的时候占用太多时间
影响
数据返回,所以采取了
多线程
记录
日志的方法。
我的程序中有个定时任务,每个十分钟把redis中的数据取出来存到mysql中用来持久化,
个人背景(我只是对于
多线程
有过
学习
,但是从来没有亲自上手使用过
多线程
在业务代码上,对于
多线程
的理解十分片面)
我担心程序在读取完并存取的过程中有新的日志存到redis中会被误删,所以进行了简易的加锁操作
public void saveLogFromRedisToM
c++
主线程
和
子线程
最近在
学习
c++
多线程
,写一篇博客
记录
下自己的收获。
一.main()函数是
主线程
函数,在main()函数中创建的线程属于
子线程
,那
主线程
和
子线程
的优先级谁更高呢?
可以看下另外一篇文档:link
在一个线程中开启另外一个新线程,则新开线程称为该线程的
子线程
,
子线程
初始优先级与父线程相同。不过
主线程
先启动占用了cpu资源,如果存在
主线程
和
子线程
争抢cpu执行权的话,看运气,谁...
如果需要让当前执行的线程暂停一段时间,并进入阻塞状态可以调用Thread类的静态方法
sleep
()实现
当当前线程调用
sleep
方法后,该线程会进入阻塞状态,在该线程睡眠的时间里,该线程不会有执行的机会,即使执行的程序中没有其他线程。
@Override
public void run() {
System.out.println("睡眠前时间"+new Dat...
public class MainActivity extends AppCompatActivity {
private static final String TAG = &amp;amp;amp;amp;amp;quot;MainActivity&amp;amp;amp;amp;amp;quot;;
@BindView(R.id.btn_test)
Button btnTest;
@BindView(R.id.tv_tes
参数为一个任务的构造方法,例如Runnable实现接口,使用Thread构造:Thread(Runnable target)
对线程任务实现命名然后再构造:Thread(Runnable target, String name)
或者直接命名的形式:Thread(String name)
常用方法:
getId的()即是返回此Thread的标识符,返回值类型为long。
getName() 返回现成的名称,即是构造方法中