#近期学习JAVA打卡!
犹豫开学忙着上课 考教师资格证和软件设计师证 很少去看JAVA 敲代码了(但是敲了一下前端的代码) 最近又回来看JAVA 学习多线程
首先学习了创建多线程的两种方法:
多线程的创建:方法一 继承Thread类
1创建一个类继承Thread类
2重写Thread中的run()
3创建一个子类对象
4用子类对象实现start()
方法二 实现Runnable接口
1.创建一个类实现Runnable接口
2.实现Runnable中的抽象方法Run()
3.创建实现类的对象
4.让对象作为参数传递到Thread的构造器中,创建Thread类的对象
5.通过Thread类调用start()
方法一和方法二的比较:
开发中 优先选择实现Runnable接口的方式
原因:1单继承的方式有一定的局限性
2实现的方式更适合多个线程共享数据的情况
联系:Thread类本身也实现了Runnable接口
相同点:两种方式都重写了run(),将线程的逻辑声明在run()中
然后 学习了Thread类中的一些方法以及线程的优先级
*1.start():启动线程,调用其中run()
*2.run():通常需要重写Thread中的run(),痛过调用run()来启动线程
*3.currentThread():静态方法,返回当前的线程
*4.getName():获取当前线程的名字
*5.setName():设置当前线程的名字
*6.join():在线程A中调用线程B的join(),线程A呈阻塞状态,直到线程B执行完,线程A才结束阻塞状态
*7.stop():已过时,执行此方法的时候,强制结束当前线程。
*8.sleep(long millitime):让当前线程睡眠指定的millitime毫秒,在指定的毫秒内,线程呈阻塞状态。
*9.yield():释放当前CPU的执行权
*10.isAlive():判断线程是否存活
*
*线程的优先级
*1.Max_Priority:10
*2.Min_Priority:1
*3.Norm_Priority:5
*如何获取线程的优先级
*1.setPriority(int I)设置线程的优先级
*2.getPriority()查看线程的优先级
*注:高优先级的在概率上是大于低优先级的,但是不一定比低优先级要快。
用方法一创建的线程:
class MyThread extends Thread {
@Override
public void run() {
for(int i=0;i<100;i++) {
if(i%2==0) {
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
}
public class FirstThread {
public static void main(String[] args) {
//创建Thread子类对象
MyThread L1=new MyThread();
//执行start方法
L1.start();
//问题1 不能通过直接执行run()来调用线程
// L1.run();
//问题2 在启动一个线程不可以让已经调用了start()的对象 需要重新再写一个对象
MyThread L2=new MyThread();
L2.start();
//测试如下方法是否在主线程main中执行
for(int i=0;i<100;i++) {
if(i%2==0) {
System.out.println(Thread.currentThread().getName()+":"+i+"******");
}}
}
}
用放方法二创建的线程
class MyThread1 implements Runnable{
@Override
public void run() {
for (int i = 0; i < 100; i++) {
if(i%2==0) {
System.out.println(i);
}
}
}
}
public class SecondThread {
public static void main(String[] args) {
MyThread1 MM=new MyThread1();
Thread NN=new Thread(MM);
NN.start();
// MM.run();
}
}