Thread 学习小结

1.ThreadFactory 创建线程的工厂类 方法 Thread newThread(Runnable r), Executors.defaultThreadFactory() 方法提供了更有用的简单实现,即在返回线程前将已创建线程的上下文设置为已知的值。

2.callable类似于 Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的. 方法 v call()。和Runnable的run()区别:
call有返回值,run没有
call能抛异常,run不能

3.Future定义了一系列操作线程的方法以及获取线程的状态 cancel(),isCancelled(),get(),isDone() 实现子类为FutureTask(),get()方法可以带参数用来设定超时时间。

4.executors
此包中所定义的 Executor、ExecutorService、ScheduledExecutorService、ThreadFactory 和 Callable 类的工厂和实用方法。此类支持以下各种方法:
创建并返回设置有常用配置字符串的 ExecutorService 的方法。
创建并返回设置有常用配置字符串的 ScheduledExecutorService 的方法。
创建并返回“包装的”ExecutorService 方法,它通过使特定于实现的方法不可访问来禁用重新配置。
创建并返回 ThreadFactory 的方法,它可将新创建的线程设置为已知的状态。
创建并返回非闭包形式的 Callable 的方法,这样可将其用于需要 Callable 的执行方法中。

5.Executor 执行已提交的 Runnable 任务的对象,方法void execute(Runnable command)

6.ExecutorService继承Executor接口,子接口ScheduledExecutorService ,已知的实现类AbstractExecutorService, ScheduledThreadPoolExecutor, ThreadPoolExecutor
可以通过Executor的newCachedThreadPool,newFixedThreadPool(int nThreads) ,newScheduledThreadPool(int corePoolSize) ,newSingleThreadExecutor() 创建它的实例。

接口ConcurrentMap 提供其他原子 putIfAbsent、remove、replace 方法的 Map。
ConcurrentHashMap 提供线程安全的map实现。
CopyOnWriteArrayList,ArrayList 的一个线程安全的变体。

接口Queue 队列,子接口BlockingQueue,已知实现类
AbstractQueue,
ArrayBlockingQueue,
ConcurrentLinkedQueue, --------一个FIFO队列。
DelayQueue,
LinkedBlockingQueue,
LinkedList,
PriorityBlockingQueue,------------和PriorityQueue一样,但是是线程安全的。
PriorityQueue,--------一个基于优先级堆的极大优先级队列。此队列按照在构造时所指定的顺序对元素排序,既可以根据元素的自然顺序 来指定排序(参阅 Comparable),也可以根据 Comparator 来指定,这取决于使用哪种构造方法,非线程安全的。
SynchronousQueue

element() 检索,但是不移除此队列的头,如果队列为空抛异常
E peek() 检索,但是不移除此队列的头,如果此队列为空,则返回 null。
E poll() 检索并移除此队列的头,如果此队列为空,则返回 null。
E remove() 检索并移除此队列的头。,如果队列为空则抛异常。

ConcurrentSkipListMap sortedMap
ConcurrentSkipListSet SortedSet
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C++中,创建线程的方式有多种方法。一种常见的方式是使用函数指针来创建线程。可以使用std::thread类来创建线程对象,并将函数指针作为参数传递给std::thread的构造函数。例如,可以使用以下代码创建一个线程对象并开启一个线程: ``` #include <cstdio> #include <thread> void fun(int a) { printf("%d\n", a); } int main() { int a = 1; std::thread t(fun, a); t.join(); return 0; } ``` 另一种方式是使用函数对象来创建线程。可以定义一个类,并重载该类的operator()()运算符,将该类的对象作为参数传递给std::thread的构造函数。例如,可以使用以下代码创建一个线程对象并开启一个线程: ``` #include <iostream> #include <thread> #include <chrono> using namespace std; class Thread_Test { public: void operator()() { for (int i = 0; i < 10; i++) { cout << "Thread_Test is running..." << endl; std::this_thread::sleep_for(std::chrono::seconds(1)); } } }; int main() { thread threadobj((Thread_Test())); cout << "main Thread is running..." << endl; threadobj.join(); cout << "exit from main Thread" << endl; return 0; } ``` 此外,还可以使用lambda函数来创建线程。可以定义一个lambda函数,并将其作为参数传递给std::thread的构造函数。例如,可以使用以下代码创建一个线程对象并开启一个线程: ``` #include <iostream> #include <thread> int main() { int a = 1; std::thread t([&a]() { std::cout << a << std::endl; }); t.join(); return 0; } ``` 总结起来,C++中创建线程的方式包括使用函数指针、函数对象和lambda函数。具体选择哪种方式取决于实际需求和个人偏好。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [C++创建线程的三种方式](https://blog.csdn.net/yangcunbiao/article/details/131151630)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [c++ 学习之 多线程(一) thread对象的创建](https://blog.csdn.net/weixin_45074185/article/details/104363741)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值