首先要知道实现java多线程有2种方法,一个是继承Thread类重写run()方法,一个是 实现Runnable接口重写run()方法,执行这个多线程类的方法都是调用start()方法,并且第二种方法才是推荐的
方法一:继承Thread类,为了标识正在运行的是哪个线程,我给这个类起个名字name
public class Mythread extends Thread{
private String name = null;
public Mythread(String name) {
this.name = name;
}
@Override
public void run() {
for (int i = 0; i < 50; i++) {
System.out.println("正在执行"+name+"的第"+i+"个数字");
}
}
}
在main中调用这个多线程类,我们多调用几次才叫多线程调用呀(模仿实际项目中多个人访问这个方法)
public static void main(String[] args) {
Mythread t1 = new Mythread("A");
Mythread t2 = new Mythread("B");
t1.start();
t2.start();
}
可以发现线程交替执行
方法二:实现Runnable接口
public class Mythread implements Runnable{
private String name=null;
public Mythread(String name){
this.name = name;
}
@Override
public void run() {
for (int i = 0; i < 500; i++) {
System.out.println("正在执行"+name+"的第"+i+"个方法");
}
}
}
调用时发现这个接口并没有start()方法,但是我们查看Thread这个类发现他有个构造方法里可以传一个Runnable接口
public Thread(Runnable r){}
也就是说Thread类是Runnable接口的实现类。因此调用代码通过Thread类来调用start()方法:
public static void main(String[] args) {
Mythread m1 = new Mythread("A");
Mythread m2 = new Mythread("B");
new Thread(m1).start();
new Thread(m2).start();
}
2种方法的区别和联系:
在实际中我们推荐用方法二,这因为:
1、方法一不能实现多继承(java没有多继承)
2、不能共享资源
例子:实现多个线程卖总共的5张票
用方法一 的代码如下:
public class Mythread extends Thread{
private int ticket = 5;
@Override
public void run() {
for (int i = 0; i < 50; i++) {// 50次循环,5张票肯定是该卖完了
if(ticket > 0 ){
System.out.println("我卖了 票"+ticket--);
}
}
}
}
调用:
public static void main(String[] args) {
Mythread t1 = new Mythread();
Mythread t2 = new Mythread();
t1.start();
t2.start();
}
结果在控制台上打印了2*5=10次,也就是每张票卖了2次,这时不行的,下面我们用Runnable接口方式实现卖票:
public class Mythread implements Runnable{
private int ticket = 5;
@Override
public void run() {
for (int i = 0; i < 50; i++) {
if(ticket > 0 ){
System.out.println("我卖了 票"+ticket--);
}
}
}
}
调用的时候,我们不是多次创建Mythread m = new Mythread(),然后每个执行new Thread(m).start()方法,而是只创建一次,然后多次start这同一个m
public static void main(String[] args) {
Mythread m = new Mythread();
new Thread(m).start();
new Thread(m).start();
}
这样就实现了资源共享了
分享到:
相关推荐
详细的讲解了java多线程的原理,并配有代码进行实战,适合java初学者和想对多线程有进一步了解的人。
JAVA多线程使用讲解,如何创建线程,讲解如何使用多线程,以及线程的等待与唤醒。 JAVA多线程使用讲解,如何创建线程,讲解如何使用多线程,以及线程的等待与唤醒。 JAVA多线程使用讲解,如何创建线程,讲解如何使用...
java多线程编程,ppt+源代码讲解。java多线程编程,ppt+源代码讲解。java多线程编程,ppt+源代码讲解。
Java多线程同步具体实例讲解 .doc
Java多线程核心技术:理解多线程、在Java中实现多线程、线程的生命周期、线程的优先级、线程的同步、线程的阻塞、守护线程、线程组、线程池、总结。
资深Java专家10年经验总结,全程案例式讲解,首本全面介绍Java多线程编程技术的专著 结合大量实例,全面讲解Java多线程编程中的并发访问、线程间通信、锁等最难突破的核心技术与应用实践 Java多线程无处不在,如...
JAVA多线程编程详解-详细操作例子
java多线程编程,十分详细地讲解java多线程编程技术,视频教程
java多线程基础知识练习题,选择题及代码题。适合初学者
张孝祥老师讲解java的多线程的配套ppt,很实用的
Java多线程生命周期的讲解,很详细,希望能帮到大家
JAVA 多线程 讲解 实例 了解JAVA多线程对以后在编程方面有很重大的意义。
主要是针对java多线程,详细描述相关的内容。 了解多线程 了解JAVA线程运行机制 线程的组成部分 线程的创建和启动
java多线程详细概述,java多线程技术讲解
Java多线程复习笔记,包括线程创建,关键字讲解,线程池等等。
thinkin java书中对多线程的描述
java多线程讲解.pdf
Java多线程是一块重要的内容,李兴华讲解的Java是一个很好的资源
java中关于多线程的使用,上课用的ppt