需求:我们要实现多线程的程序。
如何实现呢?
由于线程是依赖进程而存在的,所以我们应该先创建一个进程出来。
而进程是由系统创建的,所以我们应该去调用系统功能创建一个进程。
java是不能直接调用系统功能的,所以,我们没有办法直接实现多线程程序。
但是呢?Java可以去调用C/C++写好的程序来实现多线程程序。
由C/C++去调用系统功能创建进程,然后由Java去调用这样的东西,
然后提供一些类供我们使用。我们就可以实现多线程程序了。
步骤
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单继承带来的局限性。
适合多个相同程序的代码去处理同一个资源的情况,把线程同程序的代码,数据有 效分离,较好的体现了面向对象的设计思想。
新闻热点
疑难解答