【管它原创不原创,被转载才是好东西】浅浅浅浅谈线程
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。处于运行状态
因为在平时工作中线程是被封装在框架底层中的。但是简单的怎么去写还是要求我们会的。
开启线程我们可以实现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。处于运行状态
相关文章推荐
- 【管它原创不原创,被转载的才是好东西】浅浅浅浅的谈集合
- 【管我原创不原创,被评论才是好东西】redis实现过程
- 【转载】MFC中SDI、MDI框架各部分指针获取(网上找的,好东西大家一起分享,多谢原创作者!)
- 【管我原创,被评论才是好东西】SOA架构
- 【转载】ASP.NET线程安全与静态变量的生命周期浅谈
- 由云台协议DLL浅谈插件程序的编写(下)【原创】
- 有感于线程中断的一个方法(原创)
- 浅谈PB使用心得(一)(原创)
- (转载)浅谈linux优化及安全配置
- 浅谈Java的输入输出流(转 原创:morgan83)
- [转载]编程入门:浅谈C语言的可变参数
- linux下的存储管理----原创 转载请通知我!!!
- Extract Method(抽取方法) 学习笔记 (转载请注明Henry.Zhang原创)
- (转载)编写进程/线程监视器
- (转载)监视远程线程的创建
- 浅谈如何分类判断PB当中指定对象是否存在?(原创)
- 使用jdom操作xml数据,生成含Jtree的applet(转载 Jagie 原创 )
- (转载)安全稳定的实现进线程监控
- 浅谈如何用好PB自带的PAINTER FUNCTION?(原创)
- 使用jdom操作xml数据,生成含Jtree的applet(转载 Jagie 原创 )