精华内容
下载资源
问答
  • 这里将多线程三种实现方法:1.继承Thread类。2.实现runnable方法。3.线程池。 先说第一种:继承Thread类 为了便于理解,我们假设这样一个场景:我有两只猫,我要给他们同时喂食。 这是猫的类,这个类继承了Thread...

    这里将多线程三种实现方法:1.继承Thread类。2.实现runnable方法。3.线程池。

    先说第一种:继承Thread类

    为了便于理解,我们假设这样一个场景:我有两只猫,我要给他们同时喂食。

    这是猫的类,这个类继承了Thread类

    package com.sxj;
    
    public class MyCat extends Thread{
    	//名字
    	private String name;
    	//食物
    	private String food;
    	
    	MyCat(String name,String food){
    		this.name= name;
    		this.food=food;
    	}
    	
    	@Override
    	public void run() {
    		for(int i=0;i<100;i++)
    			System.out.println("今天我给名字叫"+name+"的猫喂"+food);
    	}
    }
    

    下面我要给两只猫喂食,代码如下:

    @org.junit.Test
    	public void main1() {
    		MyCat cat1 = new MyCat("英短", "m猫粮");
    		MyCat cat2 = new MyCat("中华田园猫", "米饭");
    
    		Thread thread1 = new Thread(cat1);
    		Thread thread2 = new Thread(cat2);
    
    		thread1.start();
    		thread2.start();
    
    	}

    我们看一下输出结果:

     下面将第二种方法,实现Runnable接口。

    同样为了便于理解,我们假设我有两只狗,我要给他们投食。

    狗的类如下:

    package com.sxj;
    
    public class MyDog implements Runnable{
    	//狗的名字
    	private String name;
    	//狗爱吃的食物
    	private String food;
    	
    	MyDog(String name,String food){
    		this.name=name;
    		this.food=food;
    	}
    
    	@Override
    	public void run() {
    		for(int i=0;i<100;i++)
    			System.out.println("今天我给名字叫"+name+"的狗喂"+food);
    	}
    	
    }
    

    投食的方法如下:

    @org.junit.Test
    	public void main2() {
    		MyDog dog1 = new MyDog("哈士奇", "饼干");
    		MyDog dog2 = new MyDog("中华田园犬", "米饭");
    
    		Thread thread1 = new Thread(dog1);
    		Thread thread2 = new Thread(dog2);
    
    		thread1.start();
    		thread2.start();
    	}

    我们来看下结果:

     

    最后一种方法,线程池实现,我们借用给狗投食的场景,狗类我就不写了,上面有,直接写测试方法:

    @org.junit.Test
    	public void main3() {
    		ThreadPoolExecutor ex = new ThreadPoolExecutor(2, 2, 100, TimeUnit.MILLISECONDS,
    				new LinkedBlockingDeque<>());
    		MyDog dog1 = new MyDog("哈士奇", "饼干");
    		MyDog dog2 = new MyDog("中华田园犬", "米饭");
    		
    		ex.execute(dog1);
    		ex.execute(dog2);
    	}

    看以下实验结果:

     好了,以上就是用三种方法实现多线程。同时每种方法都给出了具体的传参的方式,主要就是通过有参构造函数传值。

    展开全文
  • 众所周知,只要涉及多线程或者分布式,肯定是要处理传参和处理并发的问题。1.传参多线程传参,和java里普通类的传参很类似,一般是两种方式,构造方法和set方法1.1构造方法public class Test02 {public static ...

    众所周知,只要涉及多线程或者分布式,肯定是要处理传参和处理并发的问题。

    1.传参

    多线程的传参,和java里普通类的传参很类似,一般是两种方式,构造方法和set方法

    1.1构造方法

    public class Test02 {

    public static void main(String[] args) {

    R r = new R("mike");

    Thread t = new Thread(r);

    t.start();

    }

    }

    class R implements Runnable{

    private String name;

    public R(String name){

    this.name = name;

    }

    @Override

    public void run() {

    System.out.println("my name is:" + name);

    }

    }

    执行结果:my name is:mike

    1.2set方法传参public class Test02 {public static void main(String[] args) {

    R r = new R();

    r.setName("mike");

    Thread t = new Thread(r);

    t.start();

    }

    }

    class R implements Runnable{

    private String name;

    public String getName() {

    return name;

    }

    public void setName(String name) {

    this.name = name;

    }

    @Override

    public void run() {

    System.out.println("my name is:" + name);

    }

    }

    执行结果:

    my name is:mike

    两种方法都可以实现传参,看具体的场景来选择不同的方式传参。或者使用静态变量的方式,也能达到传参的效果

    2.并发问题synchronization(锁,悲观锁):

    synchronization块和synchronization方法,被锁所修饰的方法,只会允许一个线程进入方法,其他的都会陷入等待状态。

    优点:可实现线程同步问题,且synchronization()的参数,可任意指定上锁的对象,灵活度高

    缺点:若将一个大的方法修饰synchronization,大大影响效率,比如,若run()方法被synchronization修饰,由于在线程的整个生命周期内一直运行,会独占run方法,直到当前线程执行完毕,才会被下一个线程所进入。

    lock(锁,乐观锁):

    在多线程必然伴随着并发的问题。一般,我们都是使用synchronization(锁)来控制同时进入一条线程,

    或者是使用lock方法(synchronization是自动释加锁释放锁,lock是手动加锁释放锁)。

    当cs结构的时候,这样是比较稳妥的,但是,在bs架构下,每一个用户都拥有独自的实例,如果我们还是使用锁的方式或者Threadlocal,那几乎是没效用的。

    这时候,我们可以使用别的思路了,比如考虑数据库或者项目文件来标识线程从而达到同时处理一个线程的理想状况。

    为什么说是理想状态呢,因为辨别是否是一个线程依靠标示,而标示在标示的同时也是可能存在并发!

    展开全文
  • 直接说下传参的地方,其他的我默认大家都知道了,不知道这个直接去网上搜索相关的吧,多线程Python有俩种方式吧,一种是继承threading.Thread,然后重写run方法。另一种,直接函数时方法,我这里是使用函数时讲解,...

    说明:

    之前多线程一直是使用元组传递,如果我有些函数,已经有默认值,不需要传递呐?

    这个时候就需要使用json格式传值更方便。

    直接说下传参的地方,其他的我默认大家都知道了,不知道这个直接去网上搜索相关的吧,多线程Python有俩种方式吧,一种是继承threading.Thread,然后重写run方法。另一种,直接函数时方法,我这里是使用函数时讲解,因为我比较喜欢用这个函数时方法。

    1、元组格式传参:

    # 单个参数【英文逗号不能省略】
    thread_one = Thread(target=baidu_spider.run_start,args=(a,))
    # 多个参数 
    thread_one = Thread(target=baidu_spider.run_start,args=(a,b,c))
    

    2、json的kv模式传参

    # 这个需要几个参数你传几个参数,注意点,就是key必须是函数里对应的key即可。
    kwargs = {
    	"url" : url,
       "is_all" : is_all,
    }
    thread_one = Thread(target=baidu_spider.run_start,kwargs=kwargs)
    
    展开全文
  • Thread多线程传参

    2021-03-29 16:06:43
    C# Thread 多线程 传参数 提示:这里 用到了C# 的 Thread Thread myThread = new Thread(() => checkImag("11", "22", button47, pictureBox7, "aaaa")); myThread.Start(); public void checkImag...

    C# Thread 多线程 传参数

    提示:这里 用到了C# 的 Thread


     Thread myThread = new Thread(() => checkImag("11", "22", button47, pictureBox7, "aaaa"));
    
    
       myThread.Start();
    
    
    
    
      public void checkImag(string DB1, string DB2, Button button, PictureBox pictureBox, string url)
            {
                try
                {
                }
                catch (Exception es)
                {
                
                }
    
            }
    
    
    展开全文
  • 目录传递临时对象查看线程id坑一坑二小注意点传递类对象、智能指针类对象智能指针传递成员函数指针 传递临时对象 查看线程id std::this_thread::get_id(); 坑一 这里的参数传递与一般情况下不同,常见的不管是值...
  • 需求情况: 请求第三方接口,然后将获取到的内容...for循环中使用多线程进行优化 CountDownLatch downLatch = new CountDownLatch(list.size()); ExecutorService pool= Executors.newFixedThreadPool(6); List&l
  • 我想通过键盘输入“exit”来结束while循环,对于多线程不太了解,求大神指教,而且下面这个是自己试着写的,不知道为神马报空指针异常,请求援助!代码:importjava.util.Scanner;cla...我想通过键盘输入“exit”来...
  • C++ pthread 线程传参

    2021-02-24 15:45:49
    线程传参 (1)pthread_create(&semop_threadID, NULL, semopFun, a); int类型地址赋值给void * (2)num = (int *) param; void * 强制转换成 int * 运行结果 编译:g++ -o pthread pthread.cpp -lpthread ...
  • 使用多线程,多进程,携程,异步 2、多线程 进程是资源单位,每个进程,都会有一个默认的主线程 线程是执行单位 执行多线程需要导包: from threading import Thread 1、多线程第一种写法 from threading import ...
  • } 结果: 从结果可以看出无论多线程中怎样接收,在线程中都将复制出自己的一个副本。线程里面对变量的改变不起作用。这和我们平时调用函数是不同的。如下 void test1(JackTang &obj) { obj.x = 1111; } void test2...
  • 一、继承Thread类步骤:1):定义一个类A继承于Java.lang.Thread类.2):在A类中覆盖Thread类中的run方法.3):我们在run方法中编写需要执行的操作:run方法里的代码,线程执行体.4):在main方法(线程)中,创建线程对象,并启动...
  • 一、继承Thread类步骤:1):定义一个类A继承于Java.lang.Thread类.2):在A类中覆盖Thread类中的run方法.3):我们在run方法中编写需要执行的操作:run方法里的代码,线程执行体.4):在main方法(线程)中,创建线程对象,并启动...
  • 第三节 线程传参详解,detach()大坑,成员函数做线程函数 一、传递临时对象作为线程参数 1.1要避免的陷阱1: #include <iostream> #include <thread> using namespace std; void myPrint(const int &...
  • C++并发与多线程(2)——线程传参问题零、复习隐式转换和显式转换的概念一、获得线程id二、传递参数问题1.值引用2.传引用3.传指针时需要注意的点 零、复习隐式转换和显式转换的概念 隐式转换(系统根据程序的需要...
  • C#多线程多参数传递

    2021-05-14 04:16:17
    之前做了一个小的应用程序,用的是c#语言,涉及到了多线程的多参数传递,经过查找资料总结了一下解决方案!第一种解决方案的原理是:将线程执行的方法和参数都封装到一个类里面。通过实例化该类,方法就可以调用属性...
  • 线程2退出后带回的值是456 ===================== 可以从执行顺序看出,线程之间存在着竞争,并非是按照固定次序运行。 #################################...
  • 最近学的有点头大,好多函数一堆参数
  • PyQt5 多线程信息传递

    2021-05-25 15:42:11
    80) self.button.clicked.connect(self.start_login) # 绑定多线程触发事件 # 进度条设置 self.pbar = QtWidgets.QProgressBar(self) self.pbar.setGeometry(50, 50, 210, 25) self.pbar.setValue(0) # 窗口初始化 ...
  • 注: 1)之前循环创建个子进程的文章: https://blog.csdn.net/weixin_44517656/article/details/109433060 2)wait回收子进程并且获取正常退出的返回值和异常退出的信号值的文章: ...3)waitpid回收指定子进程...
  • 在python中经常会到用多线程处理某个函数来缩短运行时间。from multiprocessing import Pooldef work(x):return x+1pool = Pool(processes=4) # 4个线程x = [1,2,3,4,5,6]results = pool.map(work, x)print results...
  • 使用Win32 SDK实现多线程,一般分为两步: 1)编写线程函数 2)创建一个线程 编写线程函数一般需要用到以下类似的函数原型: DWORD _stdcall ThreadFun1(LPVIOD IpvThreadParm) Win32 SDK提供的线程创建函数是...
  • I am using pyqtSignal to send a python list as an argument from worker thread to main thread. When does qt create a copy of the object being passed as argument. According to: ...
  • 然而多线程的异步开发下,由于线程的运行和结束是不可预料的,导致数据的传递和返回有所不同。 多线程传递参数方法一:利用构造方法 多线程传递参数方法二:利用实例方法 多线程传递参数方法三:利用回调...
  • // Java8可以把方法作为参数传递,但是 这个endOfWashing方法并没有返回线程对象啊?为什么可以编译通过呢?代码如下,请看wash方法 下面那个参数this::endOfWashing :private static final Logger LOGGER = ...
  • 目录创建线程线程传参传递临时对象作为线程参数总结传递类对象、智能指针 创建线程 #include<iostream> #include<thread> using namespace std; void myPrint() { cout<<"myPrint()线程开始...
  • python 多线程logger问题

    2020-12-18 01:18:48
    这段代码就是个进程共同操e69da5e6ba903231313335323631343130323136353331333335333038作一个日志文件。这种情况下,logging的行为就很难说了。我测试了一下,日志中大概几百行。而且,可以看到一些顺序错乱现象...
  • 线程传参小记

    2021-09-24 10:54:18
    传递临时对象作为线程参数 先看下面的范例 void myprint(const int& i, char* pmybuf) { cout << i << endl; cout << pmybuf << endl; return; } int main () { int mvar = 1...
  • java多线程时,callable里面需要传递一个对象,但是对象中有一些值是变化的,打印出现发现有问题,就是发现里面有的值是重复的。 解决方案: //传对象到Callable会出现参数覆盖的情况,解决办法就是重新new一个...
  • js使用webWorker实现多线程 原生js使用worker index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,...
  • 线程传参要保证传入类型正确,避免不必要的错误 #include #include #include #include void do_something(std::string s){ std::cout ; } int main() { char buffer[1000] = "123456"; std::thread t(do_something, ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,583
精华内容 11,033
关键字:

多线程传参