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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 追梦天涯33 中级黑马   /  2015-8-27 23:47  /  263 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1:多线程(理解)
        (1)如果一个应用程序有多条执行路径,则被称为多线程程序。
                进程:正在执行的程序。
                线程:程序的执行路径,执行单元。
                单线程:如果一个应用程序只有一条执行路径,则被称为单线程程序。
                多线程:如果一个应用程序有多条执行路径,则被称为多线程程序。

                举例:迅雷下载,360的管理界面。

                多线程:多个人吃统一盘菜

        (2)多线程程序实现的两种方案:(掌握 步骤我们一起写,代码你写)
                A:继承Thread类
                        a:自定义类MyThread继承Thread类。
                        b:重写run方法(),在这里面输出1-100的数据。
                        c:定义测试类MyThreadTest,在测试类中创建MyThread类的多个对象。
                        d:调用start()

                        代码体现:
                        public class MyThread extends Thread {

                                public MyThread(){}

                                public MyThread(String name) {
                                        super(name);
                                }

                                public void run() {
                                        for(int x=1; x<=100; x++) {
                                                System.out.println(getName()+"---"+x);
                                        }
                                }
                        }

                        public class MyThreadTest {
                                public static void main(String[] args) {
                                        MyThread my1 = new MyThread("三国志");
                                        MyThread my2 = new MyThread("三国杀");

                                        //my1.setName("三国志");
                                        //my2.setName("三国杀");

                                        my1.start();
                                        my2.start();
                                }
                        }

                B:实现Runnable接口
                        a:自定义类MyRunnable实现Runnable接口。
                        b:重写run方法(),在这里面输出1-100的数据。
                        c:定义测试类MyThreadTest,在测试类中创建MyRunnable类的一个对象。
                        d:在测试类创建Thread类的多个对象,并把MyRunnable类的一个对象作为构造参数传递。
                        e:调用start()

                        代码体现:
                        public class MyRunnable implements Runnable {
                                public void run() {
                                        for(int x=1; x<=100; x++) {
                                                System.out.println(Thread.currentThread().getName()+"---"+x);
                                        }
                                }
                        }
                       
                        public class MyRunnableTest {
                                public static void main(String[] args) {
                                        MyRunnable my = new MyRunnable();

                                        Thread t1 = new Thread(my,"斗地主");
                                        Thread t2 = new Thread(my,"三国群英传2");

                                        t1.start();
                                        t2.start();
                                }
                        }

        (3)面试题:
                A:如何启动一个线程
                B:start()和run()方法的区别
                C:线程随机性原理
                D:线程的生命周期
                E:线程的安全问题是怎么产生的,以及是如何解决的?
                F:同步解决线程安全问题的方式有几种?
                G:同步代码块的锁对象是谁?同步方法的锁对象是谁?
                F:静态方法的锁对象是谁?
        (4)几个方法
                优先级(priority)
                暂停(yield)
                加入(join)
                守护线程
                线程睡眠(sleep)
                线程中断(interrupt)
        (5)案例:
                卖票案例。

                线程安全问题:
                        怎么产生的:
                                A:多线程环境
                                B:有共享数据
                                C:多条语句操作共享数据

                怎么解决:
                        把C步骤给锁起来。

                两种方案:
                        a:同步代码块
                                synchronized(锁对象) {
                                        一个原子性操作
                                }
                        b:同步方法
                                把synchronized添加到方法声明上。返回值前。

1 个回复

倒序浏览
学习了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马