码迷,mamicode.com
首页 > 编程语言 > 详细

多线程

时间:2018-11-05 20:10:31      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:runnable   art   syn   用户   类方法   tran   通过   构造器   实例   

一、创建线程

       1.1 继承Thread

       步骤:1、自定义异常类继承Thread类

                2、重写run()方法

                3、创建线程对象

                4、启动线程:线程对象.start();

      1.2 实现Runnable接口(注意也可以是匿名内部类的方式)

       步骤:1、自定义类实现Runnable接口

                2、重写run();方法

                3、创建自定义类对象(注意:这不是一个线程对象,只有继承Thread的子类才是线程类)

                4、创建线程,使用Thread(Runnable target)构造器,将自定义类对象作为参数传递。

                5、启动线程:线程对象.start();

二、Thread类

       2.1 常用构造方法

              Thread()

    Thread(String name)

              Thread(Runnable target)

              Thread(Runnable target, String name)  

       2.2 常用方法

              static Thread currentThread()  :返回当前线程对象

              String getName() :返回该线程的名称。

              int getPriority(): 返回线程的优先级。

              void setPriority(int newPriority) :更改线程的优先级。

              Thread.State getState()返回该线程的状态,状态是枚举类。

              boolean isDaemon() :测试该线程是否为守护线程。

              void setDaemon(boolean on) :将该线程标记为守护线程或用户线程。

              void join() :某个线程调用该方法加入到另一个线程中,另一个线程等待该线程执行完毕后再继续执行。

              void run() :里面写业务

              static void sleep(long millis) :正在执行的线程休眠

              void start() :使该线程开始执行,执行run方法

              static void yield() :暂停当前正在执行的线程对象,并执行其他线程。

三、线程同步

加锁原则:尽可能缩小加锁的范围,提高程序效率

       3.1 同步代码块

              synchronize(同步监听对象){

                  需要被同步的代码

              }

              注意:监听对象可以是任意的,但是要保证多个线程访问到的是同一个对象。常用当前类的字节码对象。

       3.2 同步方法

              使用synchronize修饰方法,放在返回值类型前面,不需要写同步监听对象,实例方法默认监听对象是this,静态方法默认监听对象是当前类的字节码对象。

       注意:继承的方式的话,建议使用同步代码块,因为this不是同一个对象,虽然通过static修饰方法是可以的,但是这样不好,一般static用于工具类方法。

       3.3 锁机制

       通过:private final ReentrantLock lock = new ReentrantLock();//创建锁对象

       语法:lock.lock();  //加锁

                try {

                     //需要同步的代码

                   } finally {

                            //通常释放资源                 

                            lock.unlock();//解锁

                   }

       注意:1、这种方式和前面两种方式一样,必须保证锁是同一个对象。(继承方式需要static修饰锁,实现不需要)

四、线程通信

三个方法:   均是Object方法

       void wait() :在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。

       void notify() :唤醒在此对象监视器上等待的单个线程。

       void notifyAll():唤醒在此对象监视器上等待的所有线程。

多线程

标签:runnable   art   syn   用户   类方法   tran   通过   构造器   实例   

原文地址:https://www.cnblogs.com/zwcnblog/p/9910989.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!