创建线程的方法 Thread Runnable

简介: 一:使用Theard的公共静态方法直接生成并控制,如下:public class currentThread{ public static void main(String args[]){ Threadthread = Thread.
一:使用Theard的公共静态方法直接生成并控制,如下:

public class currentThread{
   public static void main(String args[]){
       Threadthread = Thread.currentThread();
      System.out.println("线程名称是:"+thread.getName());
      System.out.println("线程的优先级是:"+thread.getPriority());
      thread.setName("thread one");
      System.out.println("线程现在的名字是:" +thread.getName());
      thread.setPriority(1);
      System.out.println("线程现在的优先级是:" +thread.getPriority());
      
       try{
          for (int i =0; i < 5; i++) {
            System.out.println(i);
            thread.sleep(1000);
         }
       } catch(Exception e) {
          // TODO:handle exception
      }
   }
}




二:工程中最常用的方法,接口Runnable,如下:


public class newThreadimplements Runnable{
//使用Runnable定义的子类中没有start()方法,只有Thread类中才有。此时观察Thread类,有一个构造方法:publicThread(Runnable targer)
//此构造方法接受Runnable的子类实例,也就是说可以通过Thread类来启动Runnable实现的多线程。start()可以协调系统的资源;
   
   
//   newThread(){
//       Threadthread = new Thread(this,"t_1");//直接重新命名
//      System.out.println(thread);
//      thread.start();
//   }
   
   
   newThread(String name){
      
   };
   
   //在正式方法中直接用newThread mt1=new newThread("线程1")就可以了
   static newThread mt1=new newThread("线程1");
   
   
   @Override
   public void run() {
       // TODOAuto-generated method stub

   }
   
   public static void main(String args[]){
      
       //newnewThread();
      
      
       newThread(mt1).start();
      
       try{
          for (int i =0; i < 10; i++) {
            System.out.println(i);
            Thread.sleep(1000);
         }
       } catch(Exception e) {
          // TODO:handle exception
      }
      
   }

}



三:Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限,下面看例子:

class MyThread extends Thread{
    privateString name;
    publicMyThread(String name) {
       super();
       this.name = name;
    }
    public voidrun(){
       for(int i=0;i<10;i++){
          System.out.println("线程开始:"+this.name+",i="+i);
       }
    }
}

package org.thread.demo;
    public classThreadDemo01 {
      public static void main(String[] args) {
           MyThread mt1=new MyThread("线程a");
          MyThread mt2=new MyThread("线程b");
           mt1.run();
           mt2.run();
    }
}




但是,此时结果很有规律,先第一个对象执行,然后第二个对象执行,并没有相互运行。在JDK的文档中可以发现,一旦调用start()方法,则会通过JVM找到run()方法。下面启动
start()方法启动线程:


package org.thread.demo;
public class ThreadDemo01 {
    publicstatic void main(String[] args) {
       MyThread mt1=new MyThread("线程a");
       MyThread mt2=new MyThread("线程b");
       mt1.start();
       mt2.start();
    }
};



这样程序可以正常完成交互式运行。那么为啥非要使用start();方法启动多线程呢?
在JDK的安装路径下,src.zip是全部的java源程序,通过此代码找到Thread中的start()方法的定义,可以发现此方法中使用了private native voidstart0();其中native关键字表示可以调用操作系统的底层函数,那么这样的技术成为JNI技术(java NativeInterface)
目录
相关文章
|
2月前
|
Java C# Python
线程等待(Thread Sleep)
线程等待是多线程编程中的一种同步机制,通过暂停当前线程的执行,让出CPU时间给其他线程。常用于需要程序暂停或等待其他线程完成操作的场景。不同语言中实现方式各异,如Java的`Thread.sleep(1000)`、C#的`Thread.Sleep(1000)`和Python的`time.sleep(1)`。使用时需注意避免死锁,并考虑其对程序响应性的影响。
|
19天前
|
缓存 安全 Java
【JavaEE】——单例模式引起的多线程安全问题:“饿汉/懒汉”模式,及解决思路和方法(面试高频)
单例模式下,“饿汉模式”,“懒汉模式”,单例模式下引起的线程安全问题,解锁思路和解决方法
|
19天前
|
Java 程序员 调度
【JavaEE】线程创建和终止,Thread类方法,变量捕获(7000字长文)
创建线程的五种方式,Thread常见方法(守护进程.setDaemon() ,isAlive),start和run方法的区别,如何提前终止一个线程,标志位,isinterrupted,变量捕获
|
19天前
|
安全 Java API
【JavaEE】多线程编程引入——认识Thread类
Thread类,Thread中的run方法,在编程中怎么调度多线程
|
2月前
|
安全 Java
在 Java 中使用实现 Runnable 接口的方式创建线程
【10月更文挑战第22天】通过以上内容的介绍,相信你已经对在 Java 中如何使用实现 Runnable 接口的方式创建线程有了更深入的了解。在实际应用中,需要根据具体的需求和场景,合理选择线程创建方式,并注意线程安全、同步、通信等相关问题,以确保程序的正确性和稳定性。
156 11
|
3月前
|
Java 开发者
在Java多线程编程中,选择合适的线程创建方法至关重要
【10月更文挑战第20天】在Java多线程编程中,选择合适的线程创建方法至关重要。本文通过案例分析,探讨了继承Thread类和实现Runnable接口两种方法的优缺点及适用场景,帮助开发者做出明智的选择。
29 2
|
3月前
|
Java
在Java多线程编程中,实现Runnable接口通常优于继承Thread类
【10月更文挑战第20天】在Java多线程编程中,实现Runnable接口通常优于继承Thread类。原因包括:1) Java只支持单继承,实现接口不受此限制;2) Runnable接口便于代码复用和线程池管理;3) 分离任务与线程,提高灵活性。因此,实现Runnable接口是更佳选择。
73 2
|
2月前
|
Java
为什么一般采用实现Runnable接口创建线程?
因为使用实现Runnable接口的同时我们也能够继承其他类,并且可以拥有多个实现类,那么我们在拥有了Runable方法的同时也可以使用父类的方法;而在Java中,一个类只能继承一个父类,那么在继承了Thread类后我们就不能再继承其他类了。
29 0
|
21天前
|
NoSQL Redis
单线程传奇Redis,为何引入多线程?
Redis 4.0 引入多线程支持,主要用于后台对象删除、处理阻塞命令和网络 I/O 等操作,以提高并发性和性能。尽管如此,Redis 仍保留单线程执行模型处理客户端请求,确保高效性和简单性。多线程仅用于优化后台任务,如异步删除过期对象和分担读写操作,从而提升整体性能。
52 1
|
3月前
|
存储 消息中间件 资源调度
C++ 多线程之初识多线程
这篇文章介绍了C++多线程的基本概念,包括进程和线程的定义、并发的实现方式,以及如何在C++中创建和管理线程,包括使用`std::thread`库、线程的join和detach方法,并通过示例代码展示了如何创建和使用多线程。
68 1