std::thread 一:创建线程的三种方式
前言:
#include <thread> thread.join() // 阻塞
thread.detach() // 非阻塞
thread.joinable() // bool,判断线程是否支持join或者detach
正文:
创建线程有三种方式,分别是:使用函数来创建线程、使用自定义的类来创建线程、使用lambda函数来创建线程
一、使用函数来创建线程
void func1()
{
cout << "我是不带参数的函数" << endl;
} void func2(int num)
{
cout << "我是带参数的函数,参数是:" << num << endl;
} int main()
{
cout << "thread begin" << endl; thread t1(func1);
t1.join(); thread t2(func2, 10);
t2.join(); cout << "thread end" << endl; return 0;
}
二、使用自定义的类来创建线程
#include <iostream>
#include <thread>
using namespace std; class myClass1
{
public:
// 重写operator方法
void operator()()
{
cout << "我是不带参数的类" << endl;
}
}; class myClass2
{
public:
int m_i;
myClass2(int i) :m_i(i) {};
void operator()()
{
cout << "我是带参数的类,参数是:" << m_i << endl;
}
}; int main()
{
cout << "thread begin" << endl; myClass1 c1;
thread t1(c1);
t1.join(); myClass2 c2(6);
thread t2(c2);
t2.join(); cout << "thread end" << endl;
return 0;
}
三、使用lambda表达式来创建线程
#include <iostream>
#include <thread>
using namespace std; int main()
{
cout << "thread begin" << endl; auto myLambda1 = [] {
cout << "卡布达 卡布达 我是不带参数的 lambda" << endl;
}; auto myLambda2 = [](int num) {
cout << "卡布达 卡布达 我是带参数的lambda,参数是:" << num << endl;
}; thread t1(myLambda1);
t1.join(); thread t2(myLambda2, 666);
t2.join(); cout << "thread end" << endl; return 0;
}
std::thread 一:创建线程的三种方式的更多相关文章
- 0036 Java学习笔记-多线程-创建线程的三种方式
创建线程 创建线程的三种方式: 继承java.lang.Thread 实现java.lang.Runnable接口 实现java.util.concurrent.Callable接口 所有的线程对象都 ...
- Java并发编程:Java创建线程的三种方式
目录 引言 创建线程的三种方式 一.继承Thread类 二.实现Runnable接口 三.使用Callable和Future创建线程 三种方式的对比 引言 在日常开发工作中,多线程开发可以说是必备技能 ...
- java创建线程的三种方式及其对比
第一种方法:继承Thread类,重写run()方法,run()方法代表线程要执行的任务.第二种方法:实现Runnable接口,重写run()方法,run()方法代表线程要执行的任务.第三种方法:实现c ...
- AJPFX总结java创建线程的三种方式及其对比
Java中创建线程主要有三种方式: 一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行 ...
- java创建线程的三种方式及其对照
Java中创建线程主要有三种方式: 一.继承Thread类创建线程类 (1)定义Thread类的子类.并重写该类的run方法,该run方法的方法体就代表了线程要完毕的任务.因此把run()方法称为运行 ...
- Java多线程之创建线程的三种方式比较
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6560057.html 一:继承Thread类创建线程 1:继承Thread类定义线程子类: 2:重写run( ...
- Java创建线程的三种方式
一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行体. (2)创建Thread子类的实 ...
- 创建线程的三种方式(Thread、Runnable、Callable)
方式一:继承Thread类实现多线程: 1. 在Java中负责实现线程功能的类是java.lang.Thread 类. 2. 可以通过创建 Thread的实例来创建新的线程. 3. 每个线程都是通过某 ...
- Java中创建线程的三种方式以及区别
在java中如果要创建线程的话,一般有3种方法: 继承Thread类: 实现Runnable接口: 使用Callable和Future创建线程. 1. 继承Thread类 继承Thread类的话,必须 ...
- 创建线程的三种方式_Callable和Runnable的区别
Java 提供了三种创建线程的方法 通过实现Runnable接口 通过继承Thread接口 通过Callable和Future创建线程 通过实现 Runnable 接口来创建线程 public cla ...
随机推荐
- Java HashMap 详解
HashMap HashMap 继承自 AbstractMap,实现了 Map 接口,基于哈希表实现,元素以键值对的方式存储,允许键和值为 null.因为 key 不允许重复,因此只能有一个键为 nu ...
- 【Azure 环境】Notification Hub无法创建Policy : 出现 500 Internal Server Error
问题描述 Notification Hub出现问题,无法创建Policy(Rule). 获得的错误消息: Error: Error making Read request on Authorizati ...
- X86模拟龙芯与编译 .NET CoreCLR
目录 .NET 收到一台龙芯机器 编译 CoreCLR 环境要求 部署虚拟机与环境 Linux 安装 KVM 下载需要的文件 启动模拟器 下载 CoreCLR 尝试编译 CoreCLR 前段时间得知龙 ...
- nebula-br local-store 模式,快速搭建主备集群实践
因为线上图数据库目前为单集群,数据量比较大,有以下缺点: 单点风险,一旦集群崩溃或者因为某些查询拖垮整个集群,就会导致所有图操作受影响 很多优化类但会影响读写的操作不好执行,比如:compact.ba ...
- Docker的使用记录
开始 这是第一个尝试在Leanote上面编写文章,我觉得最重要的事情就是能够保证md文件是能够移植的,否则如果这个软件不靠谱的话,我还能把文章移动到别的地方去.所以先写一篇文章看看效果如何,方便不方便 ...
- opencv库图像基础3直方图-python
opencv库图像基础3直方图-python 直方图是什么 OpenCV 中的直方图是图像中像素值分布情况的统计表示.它是图像空间域内像素值分布的图形表示,以便更好地理解颜色分布. 灰度直方图是图像中 ...
- Java 常用类 String的常用方法(2)
1 /** 2 * String 常用方法(2) 3 * boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束 4 * boolean startsWith ...
- Codeforces Round 916 (Div. 3)(A~E2)
A 统计一下每个字母的出现次数然后输出即可 #include <bits/stdc++.h> #define rep(i,a,b) for(register int i = (a); i ...
- Java面向对象(中)--super/多态/向下转型/equals/toString/包装类/单元测试工具
java对象 方法重写 子类继承父类以后,可以对父类同名同参数的方法,进行覆盖操作 重写后,当创建子类对象以后,通过子类对象调用子父类中同名同参数的方法时,执行的是子类重写父类的方法. 如何区分方法重 ...
- Ubuntu 与Windows 之间搭建共享文件夹
工作中经常需要搭建Linux环境用于测试以及其他开发需求,办公电脑通常是Windows 系统,为便于让文件在两个系统之间传输,可以采取共享文件的方式实现: 1.安装samba 服务: sudo apt ...