前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >进程和多线程的概念及线程的优点

进程和多线程的概念及线程的优点

原创
作者头像
用户7365393
修改2021-10-08 15:21:14
2830
修改2021-10-08 15:21:14
举报

Java 启动线程

  Java 启动线程主要有三种方式(其实还有一种实现Callable接口的方式):

  • 继承Thread类
  • 实现Runnable接口
  • 直接在函数体使用
继承 Thread 类

  先来看看Thread类的结构,如下:

代码语言:javascript
复制
public class Thread implements Runnable

  Thread类实现了 Runnable接口,它们之间具有多态关系。其实,使用继承Thread类的方式创建新线程时,最大的局限就是不支持多继承,因为 Java语言的特点就是单继承,为了改变这种限制,完全可以实现Runnable接口的方式。用这两种方式创建的线程在工作时的性质是一样的,没有本质的区别。下面给出继承 Thread 类例子(注意代码中将两个类放到了一起,运行时请放到不同的.java文件中)。

代码语言:javascript
复制
public class MyThread extends Thread {
	@Override
	public void run() {
		super.run();
		System.out.println("MyThread");
	}
}
public class Run {
	public static void main(String[] args) {
		MyThread mythread = new MyThread();
		mythread.start();
		System.out.println("运行结束!");
	}
}

输出:

代码语言:javascript
复制
运行结束!
MyThread

  从运行结果来看,MyThread.java类中的run方法执行的时间比较晚,这也说明在使用多线程技术时,代码的运行结果与代码执行顺序或调用顺序是无关的,多线程是异步的。线程是一个子任务,CPU以不确定的方式,或者说是以随机的时间来调用线程中的run 方法,所以就会出现先打印“运行结束!”后输出“MyThread”这样的结果了。同时注意:执行start()方法的顺序不代表线程启动的顺序。   如果直接在main函数中调用MyThread.java的run方法:Thread.java类中的start()方法通知“线程规划器”此线程已经准备就绪,等待调用线程对象的run()方法。这个过程其实就是让系统安排一个时间来调用Thread中的run()方法,也就是使线程得到运行,启动线程,具有异步执行的效果。如果调用代码mythread.run()就不是异步执行了,而是同步,那么此线程对象并不交给“线程规划器”来进行处理,而是由main主线程来调用run()方法,也就是必须等run()方法中的代码执行完后才可以执行后面的代码。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Java 启动线程
    • 继承 Thread 类
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档