课时3 线程启动、结束,创建线程多法,join、detach

用类作为可调用对象创建线程

class A
{
public:
    A() { cout << "构造函数" << endl; }
    A(const A& a) { cout << "拷贝构造函数" << endl; }

    void operator()() { cout << "此时在子线程中" << endl; }

    ~A() { cout << "析构函数" << endl; }
private:

};

int main(int argc, char** argv)
{
    A a;
    thread myjob(a);

    myjob.join();

    cout << "此时在主线程中" << endl;
    return 0;
}

用lambda作为可调用对象创建线程

int main(int argc, char** argv)
{
    auto f = [] {cout << "lambda" << endl; };
    thread myjob(f);
    //thread myjob([] {cout << "lambda" << endl; });这样的使用方法也可以通过编译

    myjob.join();

    cout << "此时在主线程中" << endl;
    return 0;
}

原文地址:https://www.cnblogs.com/Anthony-ling/p/11441185.html

时间: 2024-08-29 17:34:22

课时3 线程启动、结束,创建线程多法,join、detach的相关文章

线程启动和创建

创建和启动线程 在java中创建一个线程如下: Thread thread = new Thread(); 调用方法start()来启动一个线程: thread.start(); 这个例子没有指定线程执行任何代码,线程将会在启动之后停止. 有两种方式指定线程应该执行什么代码.第一种方式就是创建一个Thread的子类并覆写run()方法.第二种方式就是创建一个实现Runnable接口的类. Thread的子类 第一种方式指定线程执行什么样的代码,就是创建一个Thread的子类,并且覆写run()方

启动时创建线程并传递数据

原文地址:https://msdn.microsoft.com/zh-cn/library/ts553s52(v=vs.110).aspx 将数据传递给线程和从线程检索数据 在 .NET Framework 2.0 版中,ParameterizedThreadStart 委托提供了一种简便方法,可以在调用 Thread.Start 方法重载时将包含数据的对象传递给线程. 有关代码示例,请参见 ParameterizedThreadStart. 使用 ParameterizedThreadStar

JAVA线程应用Thread:创建线程的第二种方式:实现Runnable接口

/* 需求:卖票小程序! 思路:实现多个窗口(线程)同时售票. 步骤:1,定义类实现Runnable接口. 2,覆盖Runnable接口中的run方法. 3,通过Thread类创建线程对象. 4,将Runnable接口的子类对象作为实际参数传入Thread类的构造函数当中. 5,调用Thread类的start方法开启线程并调用Runnabke接口的run方法. */ 代码如下 class Ticket implements Runnable//extends Thread//实现Runnable

死磕 java线程系列之创建线程的8种方式

(手机横屏看源码更方便) 问题 (1)创建线程有哪几种方式? (2)它们分别有什么运用场景? 简介 创建线程,是多线程编程中最基本的操作,彤哥总结了一下,大概有8种创建线程的方式,你知道吗? 继承Thread类并重写run()方法 public class CreatingThread01 extends Thread { @Override public void run() { System.out.println(getName() + " is running"); } pub

【java并发】传统线程技术中创建线程的两种方式

传统的线程技术中有两种创建线程的方式:一是继承Thread类,并重写run()方法:二是实现Runnable接口,覆盖接口中的run()方法,并把Runnable接口的实现扔给Thread.这两种方式大部分人可能都知道,但是为什么这样玩就可以呢?下面我们来详细分析一下这两种方法的来龙去脉. 1. 揭秘Thread中run()方法 上面我们看到这两种方式都跟run()方法有关,所以我们来看一下Thread的源码中run()方法到底都干了什么: @Override public void run()

java 线程Thread 技术--创建线程的方式

在第一节中,对线程的创建我们通过看文档,得知线程的创建有两种方式进行实现,我们进行第一种方式的创建,通过继承Thread 类 ,并且重写它的run 方法,就可以进行线程的创建,所有的程序执行都放在了run 方法里:可以说run 方法里放入的是线程执行的程序:在执行线程的时候,需要调用线程的start 方法,就可以进行线程的启动: 总之就是:代码写在run 方法里面,但是线程的执行调用start 方法,start 方法会开启一个线程去执行run 方法: 方式-: public class Thre

02 如何创建线程 线程并发与synchornized

所有程序运行结果 请自行得出 创建线程方式一:继承Thread类 步骤: 1,定义一个类继承Thread类. 2,覆盖Thread类中的run方法. 3,直接创建Thread的子类对象创建线程. 4,调用start方法开启线程并调用线程的任务run方法执行. 1 /* 2 * 需求:我们要实现多线程的程序. 3 * 如何实现呢? 4 * 由于线程是依赖进程而存在的,所以我们应该先创建一个进程出来. 5 * 而进程是由系统创建的,所以我们应该去调用系统功能创建一个进程. 6 * Java是不能直接

java多线程---创建线程的几种方式

创建线程的几种方式 在并发编程中,创建线程是我们经常会做的事情,那么一般来说,创建线程有4种方式: 1.继承Thread类. 2.实现Runnable接口. 3.实现Callable接口,结合FutureTask来使用. 4.利用线程池的方式来实现. 继承Thread创建线程 public class ThreadTest1 extends Thread { @Override public void run() { try { Thread.sleep(1000); } catch (Inte

MFC创建线程示例

MFC创建线程示例 AfxBeginThread() 创建现场的方法是AfxBeginThread()函数. 在[.CPP]文件定义一个全局变量,决定什么时候退出这个线程. BOOL g_bWillExit=FALSE; 拖一个BUTTON按钮控件,[创建线程](IDC_BUTTON_THREAD),绑定单击事件函数. void CmyfirstmfcDlg::OnBnClickedButtonThread() { g_bWillExit = FALSE; AfxBeginThread((AFX

高并发之——从源码角度分析创建线程池究竟有哪些方式

前言 在Java的高并发领域,线程池一直是一个绕不开的话题.有些童鞋一直在使用线程池,但是,对于如何创建线程池仅仅停留在使用Executors工具类的方式,那么,创建线程池究竟存在哪几种方式呢?就让我们一起从创建线程池的源码来深入分析究竟有哪些方式可以创建线程池. 使用Executors工具类创建线程池 在创建线程池时,初学者用的最多的就是Executors 这个工具类,而使用这个工具类创建线程池时非常简单的,不需要关注太多的线程池细节,只需要传入必要的参数即可.Executors 工具类提供了