A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wuwangshan 中级黑马   /  2018-3-11 14:02  /  811 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

【语法】

        变量声明
        语句结构  if for switch.....
        数组
        方法

【思想】
        首先定义类        = 属性        +行为 = 名词 + 动词
        有类就能产生对象       
        封装         = 类 方法 person private
        继承        =        可维护性,提高了代码的可用行
        多态        = 父类引用指向子类对象 好处:提高了代码的扩展性(通用性)


【API】应用程序编程接口
        集合IO字符串

        类
        方法

我们学过得API

        string
                获取  charAt()
                判断
                截取
                装换
                切割
               
       
        集合体系
               
                单列
                        Collection
                        List                         Set
                        ArrayList                HashSet        LinkedHashSet
                        LinkedList                TreeSet
                双列               
                        Map
                        HashMap
                        Properties
                       
               
       
        IO体系

                字符
                        输入        Reader        FileReader        BufferedReader        InputStreamReader
                        输出        Writer        FileWiter        BufferedWriter        OutputStreamWriter        PrintWriter
                字节
                        输入

        其他类
       










【多线程概述&多线程实现】


【关键字】

        Thread[丝瑞德]
        Runnable[run雷柏]
        currentThread[卡瑞尔特 丝瑞特]


* 多线程的实现方式:
*                 方式1:一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。接下来可以分配并启动该子类的实例
*
* Thread[丝瑞德]
*                 String getName()      返回该线程的名称。
*                 void   setName(String name) 改变线程名称,使之与参数 name 相同。
*
*
* CPU执行程序的随机性

方式1:一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。接下来可以分配并启动该子类的实例

        1. 创建一个类,继承Thread
        2. 重写run()
        3. 创建一个Thread子类对象
        4. 线程子类对象 .start()

        //创建线程实例
        MyThread mt = new MyThread("张三");
        //修改线程名字
        mt.setName("张三");
        //启动线程
        mt2.start();


        Runnable[run雷柏]
        currentThread[卡瑞尔特 丝瑞特]

        多线程实现方式2:
*
* 创建线程的另一种方法是声明实现 Runnable 接口的类。该类然后实现 run 方法。然后可以分配该类的实例,在创建 Thread 时作为一个参数来传递并启动
*
*        Thread(Runnable target)
*        static Thread currentThread() :返回当前线程对象
*
*
*        既然有了继承Thread为何还要整出来实现Runnable?
*/



方式二
        1. 写一个类,实现Runnable
        2. 在实现类中重写run()方法
        3. 创建一个Thread线程对象,传递一个Runnable实现类对象,
        4. 启动线程

         打破java只支持单一继承

        //创建线程实例
                MyThread2 mt = new MyThread2(100);
                Thread t = new Thread(mt);
                t.setName("李四");
                //启动线程
                t.start();

上锁

        1, 多线程环境下运行
        2, 数据是否被共享

        synchronized[思英扣若莱z的]
        (同步,可以修饰代码块和方法,被修饰的代码块和方法一旦被某个线程访问,则直接锁住,其他的线程讲无法访问)

        同步代码块
        synchronized(锁对象){

        }
        注意:
                1. 同步代码块加在哪里? 操作共享数据的地方
                2. 锁  ---> 被所有线程共享
                3. 加完锁之后,多思考异步,能不能减少锁的校验次数,提高效率
       

注意:锁对象需要被所有的线程所共享

同步:安全性高,效率低
非同步:效率高,安全性低,


        StringBuilder  异步 不安全 效率高(单线程环境下使用)
        StringBuffer        同步 安全 效率低        (多线程环境下使用)


注意:有锁的地方一定要双重判断,作用是 提升效率
        第一次判断是否为ture
        第二次判断锁是否打开




【同步代码】synchronized[思英扣若莱z的]
       
        格式:
        public synchronized void method(){

        }

synchronized
        非静态同步方法的锁对象是this
        静态的同步方法对象是 当前类的字节码对象




















1 个回复

倒序浏览
好久没看到发笔记的了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马