Java第十六天:线程和JavaAPI

线程和JavaAPI

1. 线程
1.1 Java中创建线程的两种方法
package com.qfedu.a_thread;

/*
第一种方式:
	自定义线程类继承Thread类,重写Thread类中的run方法。
	run方法中的代码块是线程代码块
*/
class MyThread1 extends Thread {
    @Override
    public void run() {
        // 线程代码块
        for (int i = 0; i < 10; i++) {
            System.out.println("自定义线程类对象代码块");
        }
    }
}

/*
第二种方式:
	自定义线程类遵从Runnable接口,实现Runnable接口中的run方法
	run方法中的代码块是线程代码块
*/
class MyThread2 implements Runnable {

    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println("自定义线程类遵从Runnable接口实现代码");
        }
    }
}

public class Demo1 {
    public static void main(String[] args) {
        // 1. 创建自定义线程类对象
        MyThread1 thread1 = new MyThread1();
        // 2. 调用Thread类内的start方法开启线程
        thread1.start();

        // 创建遵从Runnable接口的自定义线程对象
        // 1. 创建Thread类对象,并且使用Runnable接口的实现类对象作为构造方法参数
        Thread thread = new Thread(new MyThread2());
        // 2. 调用Thread类内的start方法开启线程
        thread.start();

        for (int i = 0; i < 10; i++) {
            System.out.println("main线程");
        }
    }
}

/*
遵从接口Runnable自定义线程类使用是要优于继承Thread类
因为Java是单继承语言,如果一个类继承了Thread类,就无法在继承其他类!!!
但是一个类遵从Runnable接口,不影响继承逻辑,也不影响继承其他接口
【墙裂推荐】
	遵从Runnable接口的自定义线程类使用方式。【仅是现在】
*/
1.2 线程中的方法
构造方法:
	Thread();	
		创建一个线程类对象,并且线程的名字和执行代码没有确定,名字为null。
	Thread(Runnable target);
		创建一个线程类对象,使用遵从Runnable接口的实现类对象target,作为线
         程代码块,没有线程名
	Thread(Runnable target, String name);
		创建一个线程类对象,使用遵从Runnable接口的实现类对象target,作为线
         程代码块,线程名为指定name

成员方法:
	void setName(String name);
		设置当前线程的名字
	String getName();
		获取当前线程的名字
	void setPriority(int priority);
		设置当前线程的优先级
         线程优先级,默认是5,优先级范围 1 ~ 10 
         优先级可以决定当前线程的抢占资源的概率!!!
	int getPriority();
		获取当前线程的优先级
         
	static void sleep(int ms) throw XXXXException;
		在哪一个线程中执行,当前线程休眠指定时间,时间单位为ms 毫秒
	static Thread currentThread();
		在哪一个线程中执行,获取的就是哪一个线程类对象	
         1. 获取当前所处线程代码块对应的线程对象
         2. 要求当前线程代码必须执行

非Thread类内的方法,Object类内与线程相关方法
	void wait();
		线程进入阻塞状态
	void notify();
		唤醒在【线程池】中阻塞状态的一个线程 蹑手蹑脚叫醒一个
	void notifyAll();
		唤醒在【线程池】中阻塞状态的所有线程 一声 起来了~~~
1.3 共享资源问题,同步代码块
11月23日 岳云鹏孙越合作十周年
	100张票
淘票票 大麦网 美团

100张票是共享资源
三种销售渠道,三个销售线程

同步代码块	
	当前代码块内有且只允许一个线程执行!!!
synchronized (锁对象) {
 
}
1. 锁对象首先必须是一个对象
2. 锁对象在操作的过程中,对于所有的线程,必须是唯一对象
3. sleep方法不会开启锁对象
4. 在重写要求下,子类或者实现类重写父类或者接口中方法时
	要求方法的声明完全一致,包括异常类型抛出
	run方法在Runnable接口中是没有任何异常抛出的
	那么要求子类也不能抛出任何异常和Runnable接口一致
	这里只能捕获!!!

希望大家关注我一波,防止以后迷路,有需要的可以加我Q讨论互相学习java ,学习路线探讨,经验分享与java Q:2415773436

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值