作者 : 卿笃军
原文地址:http://blog.csdn.net/qingdujun/article/details/39341887
本文演示,一个简单的多线程实例,并简单分析一下线程。
编程多线程时,一般步骤:
1)继承Thread函数。
2)覆盖run函数。
注意:1)main函数为主线程,main里面存放的是主线程的执行代码;
Demo1为子线程,里面的run函数里面存放的是子线程需要执行的代码;其中,本文中主线程和子线程执行的优先级是一样的。
2)启动线程必须用start()启动,而不能直接调用run方法。
区别:①start() :开启线程,并执行run方法;(start会调用底层开启线程,Java本身不会开启一个线程,start肯定是调用了Windows底层的什么开启了线程,这里运行环境是Windows)
Demo1 demo1 = new Demo1(); demo1.start();
②run():相当于直接函数调用(主线程执行的run内容),子线程创建了,但没有开启并执行;(run的功能,仅仅是为了封装线程执行的代码)
Demo1 demo1 = new Demo1(); demo1.run();
③局部变量,在每个线程当中都有独立的一份。
Example: 一个简单的Demo如下:
package thread.demo1.qdj; class Demo1 extends Thread { public void run() { for (int x = 0; x < 50; ++x) System.out.println("启动了线程Demo1"); } } public class CThreadDemo1 { public static void main(String[] args) { Demo1 demo1 = new Demo1(); demo1.start(); for (int x = 0; x < 50; ++x) System.out.println("正在执行主线程"); } }
运行结果显示:
一些简单的说明:
1)获得线程的名字:[注:currentThread()获取当前线程对象 ] ,以下两种写法是一样的。
class Demo1 extends Thread { public void run() { //System.out.println(this.getName()); System.out.println(Thread.currentThread().getName()); } }
2)设置线程的名字
①编写构造函数
class Demo1 extends Thread { public Demo1(String name) { //调用父类 super(name); } public void run() { //System.out.println(this.getName()); System.out.println(Thread.currentThread().getName()); } }
②创建线程时传参
Demo1 demo1 = new Demo1("name1");
参考文献:Java视频 毕向东 主讲
原文地址:http://blog.csdn.net/qingdujun/article/details/39341887
时间: 2024-10-27 10:20:04