You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2.9 KiB
2.9 KiB
Java 线程
这是线程的结构,通过这个图中了解到,线程是由虚拟机栈、程序计数器组成。并共享方法区和堆,至于本地方法栈,则和虚拟栈差不多。都是等同的效果。
我们可以这么理解,线程比作一个合租公寓,厨房、厕所(方法区、堆);供每个人(线程)使用。至于何时何地用则是分配问题(线程同步)。我们可以通过时钟(CPU时间片轮)在程序计数器来对每个人的使用问题上进行分配。
如何使用和创建线程?
可采用如下代码:
//创建一个继承Thread类的子类。
class MyThreadsTost extends Thread{
//重写线程的run方法。
@Override
public void run(){
System.out.println("这里是新的线程。")
}
}
public class ThreadsTast {
public static void main(String [] args){
//实例化子类。
MyThreadsTast threads1 = new MyThreadsTast();
threads1.start(); //这里只能调用start方法来创建新的线程。否则就会像调用类方法一样,会在main中执行子类的run方法内容。
System.out.println("这里是main的主线程。")
}
}
结果:
这里是main的主线程。
这里是新的线程。
证明已开线程:
在显示函数中,添加Thread.currentThread().getName()到print中。
就会显示如下结果:
Thread-0: 这里是新的线程。
Main: 这里是main的主线程。
Start 方法在线程中只能start一次。不能start两次不然会报异常。
可以通过将子类重新创建一个线程对象来在使用一次。
假设:当我们只使用一次线程来执行某个方法时,可以采用匿名子类来实现,这样当应用执行到这里时就可以执行这个子类。然后执行完后就会自动回收。其写法如下:
new Thread(){
@Override
public void run(){
'''相关操作。'''
}
}.start();
Thread 类的常用方法。
-
start方法,用作于执行创建新线程。
-
run方法,作用于线程干什么事。
-
currentThread方法,返回当前线程代码的线程
-
getName方法,获取当前线程名字。
-
setName方法,设置当前线程方法。
-
join方法,暂停当前线程的运行,调用分线程来运行,等分线程运行完后再次执行当前线程。
h1.join(); //这是调用的方法,可以在主线程执行到要其他线程给结果才能运行时,可采用此方法。 -
sleep方法,控制当前线程堵塞时常。
-
isAlive方法,判断当前线程是否存活。
线程优先级
这个优先级是个肋鸡功能。优先级高是表示高概率执行。并不意味着只有高优先级执行。

