Java多线程的试题

一、创建线程的两种方式:

1、继承thread类;重写run方法。(单继承,直接写业务逻辑)

public class Demo1 extends Thread{

@Override

      public void run{

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

                   system.out.println(“自定义线程:”+i);

               }

         }

}

2、实现Runnable接口,运行run方法来实现线程。

class  Demo2 implement Runnable{

         @Override

        public void run() {

                  while (true) {

                           synchronized ("锁") {

                                  if (ticket > 0) {

                        System.out.println(Thread.currentThread().getName() + ":卖出了第" + ticket + "张");

                                          ticket--;

                                        try {

                                     Thread.sleep(100);

                                       } catch (InterruptedException e) {

                                              e.printStackTrace();

                            }

                                   } else {

                                    System.out.println("票买完了");

                                   break;

                                                 }

                                         }

                                 }

                          }

public class TestSaleTicket01 { //利用start来启动线程

                       public static void main(String[] args) {

                              Demo2 run = new Demo2();

                             new Thread(run,"yi").start();

                            new Thread(run,"er").start();

                            new Thread(run,"san").start();

                              }

                  }

}

二、多线程:

      1、多线程的作用:

1)发挥多核cpu的优势;多核CPU让多段逻辑同时工作,实现多线程。

2)防止阻塞;多条线程运行时,有一个线程读取数据阻塞,不会影响其他任务的执行。

3)便于建模。把一个大任务A分解成几个小任务,分别建立程序模型,并通过多线程分别运行这几个任务。

2、创建线程:1)继承thread类  2)实现Runnable接口,建议使用第二种方式,因为实现接口的的方式比继承类的方式更加灵活,也能减少程序之间的耦合度,面向接口也是设计模式的6大原则的核心。

3、start()方法和run()方法的区别:

线程开启用的是start方法,只有调用了start 的方法,才会表现出多线程的特性,不同线程的run()方法中的代码块交替执行。如果只调用run方法,那么代码块还是同步执行的,必须等待一个线程中的代码执行完毕后,另一个线程才能执行其run方法里面的代码。

4、Runnable接口和Callable接口的区别

Runnable接口中的run()方法返回值是void,它做的事情只是单纯的执行方法。

但callable接口中的call()方法是有返回值的,是一个泛型,和future、futuretask配合使用可以获取异步执行的结果。Callable(产生结果)功能更强大,被线程执行后,可以返回值;Future(获取结果)可以拿到异步执行任务的返回值。

例如:当某条线程执行时,我们期望的数据是否已经复制完毕无法得知时;如果用Runnable只能等待线程执行完毕,而Callable+future可以获取多线程运行结果,可以在等待时间太长没有获取到结果需要数据时取消该线程的任务。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 线程概述 线程与进程 进程  每个运行中的任务(通常是程序)就是一个进程。当一个程序进入内存运行时,即变成了一个进...
    闽越布衣阅读 4,608评论 1 7
  • Java多线程学习 [-] 一扩展javalangThread类 二实现javalangRunnable接口 三T...
    影驰阅读 8,119评论 1 18
  • 本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。 首先讲...
    李欣阳阅读 7,208评论 1 15
  • 前言 多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域,所以学好多线程并发编程对我们来说极其重要...
    嘟爷MD阅读 12,051评论 21 272
  • 首先,看到这幅画,第一感觉就是整体的线条勾勒很简单,只有三棵树,一栋房子和一个面带微笑并手牵小狗的小女孩。 那么从...
    锤锤_91d8阅读 2,472评论 1 2

友情链接更多精彩内容