首页 > 学院 > 开发设计 > 正文

多线程的实现方法

2019-11-06 07:36:39
字体:
来源:转载
供稿:网友

多线程的实现方法

需求:我们要实现多线程的程序。

  如何实现呢?

   由于线程是依赖进程而存在的,所以我们应该先创建一个进程出来。

   而进程是由系统创建的,所以我们应该去调用系统功能创建一个进程。

   java是不能直接调用系统功能的,所以,我们没有办法直接实现多线程程序。

 

   但是呢?Java可以去调用C/C++写好的程序来实现多线程程序。

   由C/C++去调用系统功能创建进程,然后由Java去调用这样的东西,

 

   然后提供一些类供我们使用。我们就可以实现多线程程序了。

 

  

  方式1:继承Thread类。

  步骤

   A:自定义类MyThread继承Thread类。

   B:MyThread类里面重写run()?

   为什么是run()方法呢?

 * 不是类中的所有代码都需要被线程执行的。

 * 而这个时候,为了区分哪些代码能够被线程执行,java提供    了Thread类中的run()用来包含那些被线程执行的代码。

   C:创建对象

   D:启动线程

 

Eg:

// 创建线程对象// MyThread my = new MyThread();// // 启动线程// my.run();// my.run();// 调用run()方法为什么是单线程的呢?// 因为run()方法直接调用其实就相当于普通的方法调用,所以你看到的是单线程的效果// 要想看到多线程的效果,就必须使用另一个方法:start()

A:Thread类的基本获取和设置方法

public final String getName():获取线程名称

public final void setName(String name):设置线程的名称

//其实通过构造方法也可以给线程起名字public MyThread(String name){super(name);}

B:思考:如何获取main方法所在的线程名称?

如何获取main方法所在的线程名称呢(同样可以获取非Thread子类的线程名 称)?

public static Thread currentThread():返回当前正在执行的线程对象

这样就可以获取任意方法所在的线程名称

Thread.currentThread().getName()

  方式2:实现Runnable接口。

  步骤:

   A:自定义类MyRunnable实现Runnable接口

   B:重写run()方法

   C:创建MyRunnable类的对象

   D:创建Thread类的对象,并把C步骤的对象作为构造参数传递

 

Eg:

// 创建MyRunnable类的对象MyRunnable my = new MyRunnable(); // 创建Thread类的对象,并把C步骤的对象作为构造参数传递// Thread(Runnable target)// Thread t1 = new Thread(my);// Thread t2 = new Thread(my);// t1.setName("凌风");// t2.setName("王琴"); // Thread(Runnable target, String name)Thread t1 = new Thread(my, "凌风");Thread t2 = new Thread(my, "王琴"); t1.start();t2.start();

 

MyRunnable 类代码:

@Overridepublic void run() {for (int x = 0; x < 100; x++) {// 由于实现接口的方式就不能直接使用Thread类的方法了,但是可以间接的使用System.out.PRintln(Thread.currentThread().getName() + ":" + x);}} 

 

B:思考:有了方式一为什么还要方式二?

可以避免由于Java单继承带来的局限性。

适合多个相同程序的代码去处理同一个资源的情况,把线程同程序的代码,数据有 效分离,较好的体现了面向对象的设计思想。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表