您的位置:首页 > 其它

【管它原创不原创,被转载才是好东西】浅浅浅浅谈线程

2017-01-04 19:20 218 查看
大家好,我又来了,今天还是给大家说下面试中的线程问题。

因为在平时工作中线程是被封装在框架底层中的。但是简单的怎么去写还是要求我们会的。

开启线程我们可以实现Runnable接口,

public class SaleTicket implements Runnable {

也可以继承thread方法

public class MyThread4 extends Thread  

一个小的demo

public class SaleTicket implements Runnable {

 

public int total;

public int count;

 

public SaleTicket() {

total = 100;

count = 0;

}

 

public void run() {

while (total > 0) {

synchronized (this) {

if(total > 0) {

try {

//Thread.sleep(800);

Thread.sleep(new Random().nextInt(1000));

} catch (InterruptedException e) {

e.printStackTrace();

}

count++;

total--;

System.out.println(Thread.currentThread().getName() + "\t当前票号:" + count);

}

}

}

 

}

 

public static void main(String[] args) {

SaleTicket st = new SaleTicket();

for(int i=1; i<=5; i++) {

new Thread(st, "售票点" + i).start();

}

}

}

1.线程和进程的区别?

   答: 进程:进程指正在运行的程序。确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能。

线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。

简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程

 

2.多线程编程的好处?

答: (简单回答)

   
多线程的概念就和CPU多核一样,好处就是一心多用的意思,比如一个程序可以同时文件读写、网络收发、用户输入等等;多线程程序并不能提高程序的运行速度,但能够提高程序运行效率,让CPU的使用率更高。

(详细点回答)

多线程的好处在于:可以使CPU多个核同时使用,令计算机效率更高效化,以前单核的机器,同时有两个线程在运行时,是先把其中某线程先执行的形式,这样无疑延长了计算所有的时间,多核的情况下,一线程可以交给一个核去处理,另一个线程可以交给另一个核去处理,这个,计算机的资源利用就大大升高.减少用户等待时间.

3.用户线程和守护线程有什么区别?

答:所谓守护线程,是指在程序运行的时候在后台提供一种通用服务的线程,比如垃圾回收线程就是一个很称职的守护者,并且这种线程并不属于程序中不可或缺的部分。因此,当所有的非守护线程结束时,程序也就终止了,同时会杀死进程中的所有守护线程。反过来说,只要任何非守护线程还在运行,程序就不会终止。

   用户线程和守护线程两者几乎没有区别,唯一的不同之处就在于虚拟机的离开:如果用户线程已经全部退出运行了,只剩下守护线程存在了,虚拟机也就退出了。因为没有了被守护者,守护线程也就没有工作可做了,也就没有继续运行程序的必要了

4.如何创建一个多线程?

答:JDK1.5之前 有两种实现方法,有两种实现方法,

分别是继承Thread类与实现Runnable接口。

    分别使用new Thread()和new Thread(runnable)形式,

    第一种直接调用thread的run方法,所以,我们往往使用Thread子类,即new
SubThread()。第二种调用runnable的run方法。

      从JDK1.5开始,出现了以线程池创建多线程的方式:

5.操作共享数据的安全性?

答:如果有多个线程在同时运行,而这些线程可能会同时运行这段代码。程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。

其实,线程安全问题都是由全局变量及静态变量引起的。若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则的话就可能影响线程安全。

6.如何暂停一条线程?

 答:两种方式暂停一条线程,一个是采取Thread类的sleep()方法,一个是在同步代码中使用wait()方法.

7.线程的调度和时间分片?

 答:java虚拟机采用抢占式调度模型,是指优先让可运行池中优先级高的线程占用CPU,如果可运行池中的线程优先级相同,那么就随机选择一个线程,使其占用CPU。处于运行状态
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: