创建一个Test类,包含有一个public权限的int型成员变量与一个char类型的成员变量,观察在main方法中的初始值。

//创建一个类
class Test
{
    public int i;
    public char c;
}
public class work
{
    public static void main(String[] args)
    {
        //产生一个实例化对象
        Test tst = new Test();
        //输出的时候,调用类的属性,通过对象来调用
        System.out.println(tst.i);
        System.out.println(tst.c);
    }
}

输出结果——0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的C++线程池实现,支持成员函数和全局函数的调用,同时可以带多个参数: ```c++ #include <thread> #include <queue> #include <mutex> #include <condition_variable> #include <functional> // 任务结构体 struct Task { std::function<void()> func; // 任务函数 }; class ThreadPool { public: ThreadPool(size_t num_threads) : stop(false) { for (size_t i = 0; i < num_threads; ++i) { // 创建线程并将其推入线程池 threads.emplace_back([this] { while (true) { Task task; { std::unique_lock<std::mutex> lock(queue_mutex); // 线程池停止运行,退出线程 if (stop && tasks.empty()) return; // 等待任务 condition.wait(lock, [this] { return stop || !tasks.empty(); }); // 有任务,取出一个任务 if (stop && tasks.empty()) return; task = std::move(tasks.front()); tasks.pop(); } // 执行任务 task.func(); } }); } } ~ThreadPool() { { std::unique_lock<std::mutex> lock(queue_mutex); stop = true; } condition.notify_all(); for (std::thread& thread : threads) thread.join(); } // 提交任务 template<class F, class... Args> void enqueue(F&& f, Args&&... args) { // 将函数和参数打包成一个任务 auto task = std::make_shared<Task>(std::bind(std::forward<F>(f), std::forward<Args>(args)...)); { std::unique_lock<std::mutex> lock(queue_mutex); tasks.emplace([task]() { (*task)(); }); } condition.notify_one(); } private: std::vector<std::thread> threads; // 线程池 std::queue<Task> tasks; // 任务队列 std::mutex queue_mutex; // 互斥锁 std::condition_variable condition; // 条件变量 bool stop; // 是否停止运行 }; ``` 使用示例: ```c++ #include <iostream> void global_func(int i, const char* s) { std::cout << "global_func: " << i << " " << s << std::endl; } class Test { public: void member_func(int i, const char* s) { std::cout << "member_func: " << i << " " << s << std::endl; } }; int main() { ThreadPool pool(4); Test t; for (int i = 0; i < 10; ++i) { pool.enqueue(global_func, i, "test"); pool.enqueue(&Test::member_func, &t, i, "test"); } return 0; } ``` 在使用时,首先创建一个线程池对象,指定线程数量。然后调用`enqueue`函数提交任务,可以传入函数指针、成员函数指针、lambda表达式等,同时可以传入多个参数。任务将被添加到任务队列,线程池的线程会不断从队列取出任务并执行。在程序结束时,需要销毁线程池对象,以确保所有线程都被正确销毁。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值