线程创建的第二种方法

第一种方法是继承并且重写run方法(不推荐使用)

第二种就是有爹的情况,用实现接口的形式拓展功能——实现Runnable接口

Runnable中只有run()方法

今天复习同步线程代码时候卡在一个问题上:

class SynThread implements Runnable
{
  run()
  {
    
  }
}

class Main
{
  public static void main(string [] args)
  {
    SynThread syn=new SynThread();
    Thread a=new Thread(syn);                      //问题:为啥要传syn进去???
    a.start();
  }
}

  


 后来看了毕老师视频后才明白。

解释:

//Thread有一种Thread(Runnable a) 的初始化方法
class Thread implements Runnable
{
  private Runnable i;
  Thread(Runnable i)   //④
  {
    this i=i;
  }

  run()//Thread类实现的Runnable方法    //②
  {
    i.run();
  }

  strat()
  {
    run();     //①
  }
}

class SynThread implements Runnable
{
  run()     //③
  {
    syso("子类SubThread");
   }
}

class SubThread extend Thread
{
  run()   //⑤
  {
    syso("子类SubThread");
  }
}

class Main
{
  public static void main(...)
  {
    SubTread sub=new SubThread();
    sub.start(); //      由①-->③

    Thread th=new Thread();
    th.strat();   // 有①-->②   但是这时i无值,所以会报错,可以在②里加上判断语句

    
    SynThread syn=new SynThread();
    Thread th=new Thread(syn);   //这里直接进入④ 给i赋了值
    th.start();  //  ①-->②-->⑤

  }
}

  

  

 

原文地址:https://www.cnblogs.com/zzw3014/p/9751900.html

时间: 2024-08-02 06:16:35

线程创建的第二种方法的相关文章

java_线程创建的两种方法

线程创建的方法有两种: 一 继承Thread类: public class ThreadTest { public static void main(String[] args) { //4)在main方法中创建线程对象 Thread01 thread01 = new Thread01(); //5)调用Thread的start方法启动线程并执行线程 thread01.start(); } } //1)创建一个类继承Thread类 class Thread01 extends Thread{ /

c++11线程创建的三种方法

一.用一个初始函数创建一个线程 直接看代码:注意c++在运行一个可执行程序的时候(创建了一个进程),会自动的创建一个主线程,这个主线程和进程同生共死,主线程结束,进程也就结束了. 1 #include "pch.h" 2 #include <iostream> 3 #include<thread> 4 void print1() 5 { 6 cout << "print1_1线程执行" << endl; 7 cout

10JavaScript DOM动态创建表格第二种方法(建议使用的方法)

<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> <script type="text/javascript"> var dic = {

C#线程同步的几种方法

我们在编程的时候,有时会使用多线程来解决问题,比如你的程序需要在后台处理一大堆数据,但还要使用户界面处于可操作状态:或者你的程序需要访问一些外部资源如数据库或网络文件等.这些情况你都可以创建一个子线程去处理,然而,多线程不可避免地会带来一个问题,就是线程同步的问题.如果这个问题处理不好,我们就会得到一些非预期的结果. 在网上也看过一些关于线程同步的文章,其实线程同步有好几种方法,下面我就简单的做一下归纳. 一.volatile关键字 volatile是最简单的一种同步方法,当然简单是要付出代价的

归纳一下:C#线程同步的几种方法

转自原文 归纳一下:C#线程同步的几种方法 我们在编程的时候,有时会使用多线程来解决问题,比如你的程序需要在后台处理一大堆数据,但还要使用户界面处于可操作状态:或者你的程序需要访问一些外部资源如数据库或网络文件等.这些情况你都可以创建一个子线程去处理,然而,多线程不可避免地会带来一个问题,就是线程同步的问题.如果这个问题处理不好,我们就会得到一些非预期的结果. 在网上也看过一些关于线程同步的文章,其实线程同步有好几种方法,下面我就简单的做一下归纳. 一.volatile关键字 volatile是

线程创建的一种特殊用法

看别人的代码遇到Thread t1 = new Thread(){};,new一個线程,后面用大括号,里面还可以写方法,一般javase中创建线程只有两种方法呀,这种用法从来没见过呀~~~~经过查找资料终于理解了.... Javase中创建线程的第一种方法 javase中创建线程的第二种方法 对Thread t1 = new Thread(){};的分析 ??这是个匿名内部类,继承了Thread类,一般我们定义的类都是有名字的如 public class A extends Thread{},这

JAVA之线程同步的三种方法

最近接触到一个图片加载的项目,其中有声明到的线程池等资源需要在系统中线程共享,所以就去研究了一下线程同步的知识,总结了三种常用的线程同步的方法,特来与大家分享一下.这三种方法分别是:synchronized代码段.synchronized修饰方法/类.ThreadLocal本地线程变量. 我们通过一个例子来表现这三种方法:一张银行卡里面有300块钱,15个线程从这张银行卡中取钱,每个线程取一次且每次取20块钱:当当前余额不足100元时,则向账户中汇款20元.三种方法每种方法都有5个线程.我们预期

字符设备设备节点创建的两种方法

在Linux下,字符设备和块设备都体现了"一切皆为文件"的思想,对于这两种设备而言,他们在Linux系统中都有一个对应的文件来"代表"它们的存在,那就是设备文件.应用程序通过操作某个设备文件,便可以操作对应的硬件.设备有主设备号和次设备号,例如在Linux下通过ls -l /dev/ttyS0命令可以看到如图信息 对于/dev/ttyS0设备文件,c表示它是一个字符设备文件(如果是'b'则是块设备文件),4是它的主设备号,64是它的次设备号.Linux系统根据设备文

OC中动态创建可变数组的问题.有一个数组,数组中有13个元素,先将该数组进行分组,每3个元素为一组,分为若干组,最后用一个数组统一管理这些分组.(要动态创建数组).两种方法

<span style="font-size:24px;">//////第一种方法 // NSMutableArray *arr = [NSMutableArray array]; // for (int i = 0; i < 13; i ++) { // [arr addObject:[NSString stringWithFormat:@"lanou%d",i + 1]]; // } // NSLog(@"%@",arr);