Java程序中的 public static void main() 方法时主线程的入口,当运行Java程序时,会先执行这个方法。
注意:
(1)、每个程序至少自动拥有一个线程,称为主线程。
(2)、当程序加载到内存时启动主线程。
(3)、开发中用户编写的线程一般是指除了主线程之外的其他线程。
使用一个线程的主要步骤:
(1)、定义一个线程,同时指明这个线程索要执行的代码,即期望完成的功能
(2)、创建线程对象
(3)、启动线程
(4)、终止线程
Thread 类常用的方法:
java 提供了java.lang.Thread 类支持多线程编程,该类提供了大量的方法来控制和操作线程,如下
定义一个线程类常见的两种方法:继承java.lang.Thread 类和实现java.lang.Runnable 接口
1、使用Thread 类创建线程
创建线程时继承Thread 类并重写Thread类的run 方法。Thread 类的run 方法是线程要执行操作任务的方法,所以线程要执行的操作代码都需要写在run() 方法中,并通过调用start() 方法来启动线程。
使用继承Thread 类的方式创建线程主要步骤
(1)、定义一个类继承Thread 类,重写run 方法,
(2)、重写run 方法,并在方法中写需要输出的数据
(3)、创建线程对象
(4)、调用start() 方法启动线程
注意:创建对象时不会执行线程,必须调用线程对象的start() 方法才会使线程开始运行。
package com.obge.threadstu; public class ThreadStu extends Thread { private int icount =0; //重写run 方法 public void run(){ // while(icount <5){ // icount ++; // System.out.println("while的值:"+icount); // } do{ icount ++; System.out.println("do_while的值:"+icount); }while (icount<4); // for(;icount<3;icount++){ // System.out.println("for的值:"+icount); // } } } package com.obge.threadstu; public class TestThread { public static void main(String[] args) { //实例化线程对象 ThreadStu threadStu = new ThreadStu(); threadStu.start(); } }
缺点:虽然,使用继承Thread的方式简单明了,但是如果定义的类已经继承了其他类则无法在继承Thread 类。所以引入了另一种方式实现Runnable 接口创建线程
2、使用Runnable 接口创建线程
Runnable 接口中声明了一个run()方法(即public void run() )
一个类可以通过实现Runnable 接口并实现其 run() 方法完成线程的所有活动,其中以实现的run() 方法称为该对象的线程体。任何实现Runnable 接口的对象都可以作为一个线程的目标对象。
使用实现Runnable 接口方式创建对象的主要步骤:
(1)、定义一个类实现java.lang.Runnable 接口
(2)、实现该接口的run()方法,并在方法中写需要输出的数据
(3)、创建线程对象
(4)、调用start() 方法启动线程
使借助Thread thread = new Thread( new RunnableStu());创建对象
package com.obge.threadstu; public class RunnableStu implements Runnable{ //重写注解 一个内建注解 @Override public void run() { for(int i = 0;i<3;i++){ System.out.println("for的值:"+i); } } } package com.obge.threadstu; public class TestThread { public static void main(String[] args) { //实例化线程对象 //ThreadStu threadStu = new ThreadStu(); Thread thread = new Thread( new RunnableStu()); thread.start(); } }
两种方式比较:
直接继承Thread 类的方式编写简单,可以直接操作线程,适合单重继承的情况
实现Runnable接口方式,当一个线程继承另一个类时,只能实现Runnable 接口的方法创建线程,而且还可以使多个线程之间使用同一个Runnable对象(因为java 只能单继承,可以实现多个接口)
原文:https://www.cnblogs.com/obge/p/13636383.html