您的位置:首页 > 编程语言 > Java开发

Java自学之路-Java基础教程-35:Java的多线程类Runnable和主线程子线程

2018-03-19 16:10 519 查看
Java的多线程类可以用继承Thread类创建,还可以实现接口Runnable创建。上一节使用匿名类创建线程,这里也使用匿名类实现Runnable接口。

public static void main(String[] args) {
// TODO Auto-generated method stub

new Runnable() {

@Override
public void run() {
System.out.println("Play music!");
}

}.run();

new Runnable() {

@Override
public void run() {
System.out.println("Buy on Taobao!");
}

}.start();

new Runnable() {

@Override
public void run() {
System.out.println("Down load movies!");
}

}.start();

}
注意,在Runnable(){}类体中实现了run()方法,也是使用@Override进行重写,并在后面调用了start()方法去把方法执行了。这种使用Runnable接口和匿名类创建线程的方式很常见。
在main()方法中可以调用这些创建的线程对象,其实main()方法本身在使用一个线程,叫做主线程。Thread.currentThread().getName()可以获取到当前线程的名称,在main()方法中打印后显示主线程的名称为main。

public static void main(String[] args) {
// TODO Auto-generated method stub

System.out.println(Thread.currentThread().getName());

}相对于main()方法的主线程来说,其他线程称为子线程。调用Thread.sleep(1000)方法可以让主线程休眠1000毫秒,也就是休眠1秒。如果要实现每隔1000毫秒打印一句话,就可以用while循环和.sleep()方法来实现。

public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub

int i = 1;
while (i <= 10) { Thread.sleep(1000); System.out.println(i); i++; } }
上面的例子在主线程中休眠1秒,再打印数字,就像一个计时器一样执行程序。这个sleep()方法会抛出线程中断异常InterruptedException,所以需要处理,要么继续向外抛出处理,要么用try{}和catch(){}进行捕捉处理。
看下面的程序,就可以看出两个子线程分别在独立于main的主线程在工作。

public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub

Thread childThread1 = new Thread() {

@Override
public void run() {
int i = 1;
while (i <= 10) { try { sleep(1000); System.out.println(Thread.currentThread().getName() + " run:" + i); } catch (InterruptedException e) { e.printStackTrace(); } i++; } } }; Thread childThread2 = new Thread() { @Override public void run() { int i = 1; while (i <= 10) { try { sleep(1000); System.out.println(Thread.currentThread().getName() + " run:" + i); } catch (InterruptedException e) { e.printStackTrace(); } i++; } } }; childThread1.start(); childThread2.start(); System.out.println(Thread.currentThread().getName()); System.out.println("main finished!"); }

程序执行结果:main
main finished!
Thread-0 run:1
Thread-1 run:1
Thread-0 run:2
Thread-1 run:2
Thread-0 run:3
Thread-1 run:3
Thread-0 run:4
Thread-1 run:4
Thread-0 run:5
Thread-1 run:5
Thread-0 run:6
Thread-1 run:6
Thread-0 run:7
Thread-1 run:7
Thread-0 run:8
Thread-1 run:8
Thread-0 run:9
Thread-1 run:9
Thread-0 run:10
Thread-1 run:10

main()方法在程序中调用了两个线程childThread1.start();和childThread2.start();然后才打印主线程的名称,执行过程中却是先打印了主线程名称main而且打印了主线程结束main finished,然后两个线程就还在各自跑,每隔1秒钟就打印i的值,并且可以看出两个子线程在同步地执行,并不互相干扰。
至此,前面35节已经算是Java初级入门了。Java还有很多关键字和API类库,继续学习可以掌握更多细节的东西。无论看书自学,还是在网上找视频跟着练习,都可以如鱼得水,游刃有余地深入学习Java。



具有OCR和ASR功能,可以识别图片和录音中文字,并有多国语言翻译功能,可以作为便签或笔记,类似微博的图文应用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐