线程与进程很相似,他们都是程序的一个顺序执行机构,但又有一些区别。进程是一个实体,每个进程都有自己独立的状态和自己的专用数据段。线程则共享数据,同一个程序中的所有线程只有一个数据段,线程间可能互相影响,比如数据访问的互斥和同步。
线程本身的数据通常只有寄存器数据和程序执行时的堆栈段,所以线程的切换比进程的负担要小。线程不能自动运行,必须跻身在某一进程中,由进程触发。一个进程可以有多个线程且进程间不共用线程。
实现多线程有两种方法,一是继承Thread类,二是实现Runnable接口。
继承Thread类创建线程时,首先要定义一个Thread类的子类,并在该子类中重写run()方法。run()方法是线程体,说明该线程的具体操作。需要创建线程时,只需创建该子类的对象在调用其start()方法即可。
实现Runnable接口创建线程必须重写该接口的run()方法(Runnable接口只有一个run()方法)。
由于Java是单继承语言,不直接支持多继承,如果一个类已经是其他类的子类,就不能在继承Thread方法使该类成为线程类,这时就要采用实现Runnable接口的方式。
两种方法创建的线程中具有相同目标对象的线程可以共享内存单元,但是实现Runnable接口的线程去创建目标对象的类可以是某个特定类的子类,因此实现Runnable接口创建线程比继承Thread类创建线程更灵活。
举几个小例子来看一下哈
继承Thread类实现的多线程:
class MyThread1 extends Thread{
private String name;
public MyThread1(String name){
this.name= name;
}
public void run(){
for(int i=0;i<15;i++){
System.out.println(this.name+"---->Is Running");
}
}
}
public class ThreadDemo01{
public static void main(String[] args){
Runnable r1 = new MyThread1("线程A");
Runnable r2 = new MyThread1("线程B");
Runnable r3 = new MyThread1("线程C");
Runnable r4 = new MyThread1("线程D");
Thread t1 = new Thread (r1);
Thread t2 = new Thread (r2);
Thread t3 = new Thread (r3);
Thread t4 = new Thread (r4);
t1.start();
t2.start();
t3.start();
t4.start();
//也可以这样写
/* MyThread mt1 = new MyThread("线程A");
MyThread mt2 = new MyThread("线程B");
MyThread mt3 = new MyThread("线程C");
MyThread mt4 = new MyThread("线程D");
mt1.start();
//同一线程不能连续启动,编译没错误,但运行错误
mt2.start();
mt3.start();
mt4.start();*/
}
}
0.0!!运行结果好长,就不截图了哈,可以自己试试。
实现Runnable接口的多线程(实现了共享资源):
class MyThread2 implements Runnable{
//定义十张票
private int ticket=10;
public void run(){
for(int i=0;i<500;i++){
if(this.ticket>0){
System.out.println("卖票-------"+(this.ticket--));
}
}
}
}
public class ThreadDemo02 {
public static void main(String[] args){
MyThread2 mt =new MyThread2();
//共享同一资源
Thread mt1 = new Thread(mt);
Thread mt2 = new Thread(mt);
Thread mt3 = new Thread(mt);
mt1.start();
mt2.start();
mt3.start();
}
}
运行结果:
分享到:
相关推荐
1、Java有两种实现多线程的方式:通过Runnable接口、通过Thread直接实现,请掌握这两种实现方式,并编写示例程序。 2、多线程是并发执行的,交替占有cpu执行,请编写示例程序,并观察输出结果。 3、采用线程同步方法...
多线程两种实现方式Java,MLDN,实训课程中的多线程
Qt两种方法实现多线程的开启,及子线程的安全结束线程,及QMutex加锁,Qt单例化实现
Java中有两种实现多线程的... Java代码 Java中有两种实现多线程的方式以及两种方式之间的区别 Java中有两种实现多线程的方式以及两种方式之间的区别 classThreadTestextendsThread{ privateintticket=100; publi
包括线程的介绍,与进程的区别,多线程与单线程,怎样实现多线程。用户级线程的优缺点。
本文首先介绍了线程的有关概念,接着介绍了线程的生命期及其状态间的转换,多线程的调度 原则,线程的死锁,详细阐述了多线程的两种实现方法: 由Thread类派生子类;实现Runnable接口
网络编程示例-FTP客户端软件(分别用单线程和多线程两种方法实现,包含详细设计过程)[汇编].pdf
线程的概念及简单实现博客源代码。想要学习更多有关于Java多线程的知识,请关注博客http://blog.csdn.net/yegongheng
介绍了JAVA实现多线程的两种方法实例分享,有需要的朋友可以参考一下
在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口(csdn)————程
1. 在Windows操作系统上,利用... 在上述两种环境下,实现相乘操作的两个矩阵均作为应用程序的输入参数动态生成,并输出计算结果。 4. 在程序实现过程中,要求每个乘积矩阵元素的计算过程均由一个独立的线程实现。
主要为大家详细介绍了python实现多线程的两种方式,感兴趣的朋友可以参考一下
使用Qt也已经有一段时间了,虽然使用过继承QThread重写run函数,以及继承QObject然后使用MoveToThread两种方法实现多线程,但是在QSerialPort的使用过程中,两种方法都存在一定的问题。 典型的问题: QObject: ...
多线程 1. 什么是线程: 线程就是程序中单独顺序的流控制。线程本身不能运行,它只能用于程序中。 2. 什么是多线程: 多线程则指的是在单个...然而,多任务处理有两种截然不同的类型: 基于进程的和基于线程的。
Qt线程间共享数据主要有两种方式: 1)使用共享内存。即使用一个两个线程都能够共享的变量(如全局变量),这样两个线程都能够访问和修改该变量,从而达到共享数据的目的。 2)使用singal/slot机制,把数据从一个...
下面小编就为大家带来一篇java实现多线程的两种方式继承Thread类和实现Runnable接口的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
本文主要介绍了Java多线程实现的两种方式:继承Thread类、实现Runnable接口。具有一定的参考价值,下面跟着小编一起来看下吧
很不错的文章,讲解了多线程的两种方式,各自的使用特色
JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。
对QT中多线程的使用方式moveToThread方法进行剖析,通过新建两种不同的类分别实现moveToThread方法,并通过实例化对象验证该方法。