zoukankan      html  css  js  c++  java
  • 多线程(一)

    面试题

    1.谈谈你对程序、进程、线程的理解

    程序(program)是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。
    进程(process)是程序的一次执行过程,或是正在运行的一个程序。进程作为资源分配的单位,系统在运行时会为每个进程分配不同的内存区域
    线程(thread),进程可进一步细化为线程,是一个程序内部的一条执行路径。

    2.代码完成继承 Thread 的方式创建分线程,并遍历100以内的自然数

    /**
     * 多线程的创建,方式一:继承于Thread类
     * 1.创建一个继承于Thread类的子类
     * 2.重写Thread的run()方法 ---> 将此线程的方法声明在run()中
     * 3.创建Thread类的子对象
     * 4.通过此对象调用start()
     *
     * 例子:遍历100以内的自然数
     *
     * 说明:高优先级的线程要抢占低优先级线程cpu的执行权。
     *      但是只是从概率上讲,高优先级的线程高概率的情况下被执行。
     *      并不意味着只有当高优先级的线程执行完以后,低优先级的线程才会被执行。
     *
     * @author alpaca
     * @create 2020-06-28 9:11
     */
    
    //1.创建一个继承于Thread类的子类
    class MyThread extends Thread{
        //2.重写Thread类的run()
        @Override
        public void run() {
            for(int i=0;i<1000;i++){
                System.out.println(Thread.currentThread().getName() + ":" +Thread.currentThread().getPriority()+":"+ i);
            }
        }
    
    }
    
    public class ThreadTest {
        public static void main(String[] args) {
            //3.创建Thread类的子对象
            MyThread t1 = new MyThread();
    
            t1.setName("线程一:");
            //设置分线程的优先级
            t1.setPriority(Thread.MAX_PRIORITY);
    
            //4.通过此对象调用start():①启动当前线程 ②调用当前线程的run()
            t1.start();
    
            Thread.currentThread().setName("主线程:");
            Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
    
            //如下操作仍在main线程中执行的
            for(int i=0;i<500;i++){
                if(i%2==0) {
                    //i.sout
                    System.out.println(Thread.currentThread().getName()
                            + ":" +Thread.currentThread().getPriority()
                            + ":"+i + "****main()****");
                }
            }
    
        }
    }
    

    3.代码完成实现 Runnable 接口的方式创建分线程,并遍历100以内的自然数

    /**
     *
     * 创建多线程的方式二:实现Runnable接口
     * 1.创建一个实现了Runnable接口得类
     * 2.实现类去实现Runnable中的抽象方法:run()
     * 3.创建实现类的对象
     * 4.将此对象作为参数传递到Thread类的构造器中,创建Thread类的对象
     * 5.通过Thread类的对象调用start()
     *
     *
     * @author alpaca
     * @create 2020-06-28 11:42
     */
    
    //1.创建一个实现了Runnable接口得类
    class MThread implements Runnable{
    
        //2.实现类去实现Runnable中的抽象方法:run()
        @Override
        public void run() {
            for(int i = 0;i < 100;i++){
                System.out.println(Thread.currentThread().getName() + ":" + i);
            }
        }
    }
    
    public class ThreadTest1 {
    
        public static void main(String[] args) {
            //3.创建实现类的对象
            MThread m1 = new MThread();
            //4.将此对象作为参数传递到Thread类的构造器中,创建Thread类的对象
            //Ctrl + P 可以查看参数
            Thread t1 = new Thread(m1);
            //5.通过Thread类的对象调用start():①启动线程
            // ②调用当前线程的run() --> 调用了Runnable类型的target的run()
            t1.start();
    
            //再启动一个线程,遍历100以内的自然数
            Thread t2 = new Thread(m1);
            t2.setName("线程2");
            t2.start();
        }
    }
    

    4.对比两种创建方式

    开发中:优先选择:实现Runnable接口的方式
    原因:1. 实现的方式没有类的单继承性的局限性
    2. 实现的方式更适合来处理多个线程有共享数据的情况。
    联系:public class Thread implements Runnable
    相同点:两种方式都需要重写run(),将线程要执行的逻辑声明在run()中。

    5.说说你对 IDAE 中 Project 和 Moudule 的理解

    IDAE 中首先创建一个工程 (Project) ,最顶级的结构,
    在工程下面可以声明一个一个的模块 (Moudule)

  • 相关阅读:
    用单循环链表实现约瑟夫问题。
    迅雷2014校园招聘笔试题
    JSP:JAVA Bean在JSP中的运用
    大学生学业指导类书目
    IOS详解TableView——对话聊天布局的实现
    jQuery EasyUI API 中文文档
    在Centos 5.4上安装Mysql5.5.10 (整理以前的工作文档)
    Centos环境下部署游戏服务器-SVN
    原本好好的程序,怎么电脑重启后就打不开了?
    UVA 10911 Forming Quiz Teams(dp + 集合最优配对问题)
  • 原文地址:https://www.cnblogs.com/NTyee/p/13202739.html
Copyright © 2011-2022 走看看