/*
进程:一个正在执行中的程序,每个进程都执行一个顺序,该顺序是一个执行路径/控制单元。
线程:进程中的一个独立控制单元,线程控制这进程的执行。一个进程中至少有一个线程。
JVM中,启动时有一个进程java.exe,该进程中至少有一个线程执行java程序,且该线程运行代码存在于main方法中,该线程称为主线程。
扩展:实际在JVM中,除了主线程执行java程序外,至少还有一个线程在执行垃圾回收机制。
如何用代码自定义线程?
通过API查找,java已提供线程的封装对象Thread类,由此,有两种创建方法:
1.创建方法一:继承Thread类。
步骤:1.定义类继承Thread。
2.覆盖run方法。目的:将自定义的代码存储在run方法中,让线程运行。
3.调用线程的start方法,其有两个功能:启动线程、调用run方法。
多线程特点:随机性,在某一刻,只能有一个线程被cpu执行(多核cpu除外),谁得到cpu的执行权就执行谁,执行时长目前由cpu控制。
自定义子类覆盖Thread类中run方法的目的:用于存储要运行的代码。
线程都有自己的默认名称,格式:Thread-编号,编号从0开始依次递增。
static Thread currentThread():获取当前线程对象。
getName():获取线程名称。
线程名称设置:setName或构造函数。
*/
package thread;
class Demo extends Thread
{
//private String name;
Demo(String name)
{
//this.name=name;
super(name);
}
public void run()
{
for (int x=0; x<20; x++)
{
System.out.println(Thread.currentThread().getName()+"Hello Demo!-------"+this.getName()+x);
//此处:Thread.currentThread()==this,但是前者更通用且会涉及到第二种线程创建方式,故因使用前者。
}
}
}
class Thread1
{
public static void main(String[] args)
{
Demo d1 = new Demo("Ryan");
Demo d2 = new Demo("MUFC");
d1.start(); //开启线程并调用run方法
d2.start();
//d1.run(); 只是调用run方法,未开启线程,程序只能以主线程且只有主线程的单线程模式运行,无法达到多个程序同时运行的效果。
for (int x=0; x<20; x++)
{
System.out.println("main Hello World!-------"+x);
}
}
}
|
|