线程的学习笔记

线程

        创建new、启动strat()、执行run()、设置守护setDaemon(true)、设置优先级setPriority(int k)、等待join()join执行的线程死亡其他线程才执行、暂停sleep(long millis)等操作的整理。


1、Thread类

(1)继承Thread可定义新的Thread类;

        Thread name = new Thread ();

        Name.Start();启动线程;

        Run()封装在Thread类的执行方法。

        线程通过start()开启,执行的是run()。

        例如:

        自定义线程的声明:public class ThreadSleep extends Thread

        构建:ThreadSleep ts1 = new ThreadSleep();

(2)通过runnable接口构建线程

        例如:

        自定义线程的声明:public class SellTicketLock implements Runnable

        构建:SellTicket st = new SellTicket();

        Thread t1 = new Thread(st,"name");//name为当前接口的名字


2、ThreadDaemon类(自定义类,继承Thread,重写run()方法):

public void run() {

        for(int i= 0; i < 100; i++) {

            System.out.println(getName()+":"+i);

        }

}//便于输出线程的结果,run的设置根据项目的需求而定

        创建格式:type name = new type();

        例如:ThreadDaemon ts1 = new ThreadDaemon();

        (1)void setDaemon(boolean on):将此线程标记为守护线程,当运行的线程都是守护线程时,Java虚拟机退出。

        (2)ts1.setName("关羽");设置线程的名称

        (3)Thread.currentThread().setName("刘备"):设置当前线程的名称

        (4)ts1.setDaemon(true)设置ts1为当前ThreadDaemon的守护线程,即当前线程消亡,ts1随即消亡。

        (5)ts1.start();启动线程(最后一步)

        (6)Thread.currentThread().getName():返回线程当前的名称;


3、ThreadJoinDemo类(自定义类,继承Thread,重写run()方法)

        创建:ThreadJoin ts1 = new ThreadJoin();

        ts1.join();等待整个ts1的死亡,死亡后其他线程才开始运行,先写ts1.start()再有join(),再把其他的线程start()启动;


4、ThreadPriority

        创建:ThreadPriority tp1 = new ThreadPriority();

        (1)返回线程的最大(最小)(当前)优先级:

                 Thread.MAX (MIN)(NORM) _PRIORITY

        (2)tp1.setPriority(int k);设置tp1的线程优先级为k,优先级越高的线程先执行。


5、ThreadSleep

        static void sleep(long millis)使当前执行的线程停留(暂停执行)指定的毫秒数;sleep写在自定义Thread继承类ThreadSleep的run()方法中,例如:

public void run() {

        for(int i= 0; i < 100; i++) {

            System.out.println(getName()+":"+i);

            try

            {

                Thread.sleep(1000);

            } catch (InterruptedException e)

            {

                e.printStackTrace();

            }

        }

    }

注意:sleep()通常会出现异常,需要配合try-catch使用。


6、lock()死锁

        private Lock lock = new ReentrantLock();

        lock.lock();//加lock锁

        lock.unlock();//释放锁

        注意:lock()通常写在线程类的run()中,且最后必须释放unlock(),若配合sleep()使用,需要用try-catch-finally使用,lock()写在try中,unlock()写在finally中。


7、synchronized(obj)进程同步

        synchronized(obj){代码块};//表示这段代码安全,线程安全

        线程同步代码块相当于给线程枷锁,让抢占到cpu的线程得等待上一个线程的运行结束,解决了数据安全问题。

        Public synchronized void 方法名():方法名前加同步,表示安全。

     (1)把不安全的类变成安全的类:

        安全类:打开类的声明,若方法前有synchronized表示为安全类。

        Type name = collections.synchronizedList(new type()(可更换类))

        例如: List<String> name = collections.synchronizedList(new ArrayList<String>());

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值