linux 多线程面试题_linux 线程 pthread_create_linux进程线程(2)

电脑杂谈  发布时间:2019-07-19 11:09:22  来源:网络整理

4、 当一个线程开始执行同步代码块时,并不意味着必须以不间断的方式运行,进入同步代码块的线程可以执行thread.sleep()或者执行thread.yield()方法,此时它并不释放对象锁,只是把运行的机会让给其他的线程。当一个线程开始执行同步代码块时,并不意味着必须以不间断的方式运行,进入同步代码块的线程可以执行thread.sleep()或者执行thread.yield()方法,此时它并不释放对象锁,只是把运行的机会让给其他的线程。wait方法属于object类,使线程放弃进入执行,进入线程等待池,只能使用notify或notifyall方法才能唤醒此线程,线程会等待进入线程池。

死亡(dead)

当线程执行完毕或被其它线程杀死,线程就进入死亡状态,这时线程不可能再进入就绪状态等待执行。

自然终止:正常运行run()方法后终止

异常终止:调用stop()方法让一个线程终止运行

堵塞(blocked)

由于某种原因导致正在运行的线程让出CPU并暂停自己的执行,即进入堵塞状态。

正在睡眠:用sleep(long t) 方法可使线程进入睡眠方式。一个睡眠着的线程在指定的时间过去可进入就绪状态。

正在等待:调用wait()方法。(调用motify()方法回到就绪状态)

被另一个线程所阻塞:调用suspend()方法。(调用resume()方法恢复)

如何处理线程不安全问题 有2种解决方法。

Icon

1.放在栈里面的数据都是线程安全

2.同步块,同步关键字修饰的都是线程安全

3.final修饰的变量都是线程安全

4.ThreadLoacl放置的变量可以解决线程安全

5.可以考虑JDK5提供的线程安全集合和类

中静态函数没有this指针(即在内存中静态函数和普通全局函数几乎没有什么区别)linux 多线程面试题,故可以匹配编译通过, 但是当线程函数要访问私有变量呢。主sta 与sta唯一的不同是这是傻瓜型的,连静态和全局变量都可以不用线程保护,因为所有不是安全访问静态和全局变量的对象都通过主线程(第一个调用coinitialize的线程)的消息派送机制运行,因此不安全的访问都被集中到了一个线程的调用中,因而调用被序列化了,也就实现了对静态和全局变量的线程保护。因此在多线程环境中对一个变量进行读写时,我们需要有一种方法能够保证对一个值的递增操作是原子操作——即不可打断性,一个线程在执行原子操作时,其它线程必须等待它完成之后才能开始执行该原子操作。

第二,就是实现线程间同步啦,用互斥锁,信号量。让线程有序的访问变量就可以啦

线程中常用方法的区别,

Icon

首先,线程中最多用到的是start方法,它的作用是用来启动一个线程。(一个Thread类的对象就是一个线程,用这个对象.start()就是启动一个线程)

3、sleep()方法声明抛出interruptedexception异常,而yield()方法没有声明抛出任何异常。sleep()方法声明抛出interruptedexception,而yield()方法没有声明任何异常。③ sleep()方法声明抛出interruptedexception,而yield()方法没有声明任何异常。

sleep是用来休眠一个线程一段时间,

join是用来强制执行一个线程,

wait这个方法是Object类中的方法,用于等待。

除yield(),礼让的意思就是让另外一个线程执行一会,然后自己再执行,不同于sleep。

还有获得当前线程的对象,这个方法也很重要,currentThread()。

按照大纲考点的顺序,诸如进程的概念、基本特征、组成结构,进程与程序的区别与联系,进程的状态及其相互转换的条件及过程,进程间的通信方式,线程的定义以及和进程的区别与联系,调度的基本概念、时机、切换过程和各种调度算法,进程同步相关的概念,实现同步与互斥的机制,信号量和pv操作,管程的基本组成结构和运行过程,死锁的基本概念,死锁产生的四个必要条件,预防、避免、检测和解除死锁的原理与方法,这些点都可以出现在选择题中进行考查。八、矩阵考试要求1.理解矩阵的概念,了解单位矩阵、数量矩阵、对角矩阵、三角矩阵的定义及性质,了解对称矩阵、反对称矩阵及正交矩阵等的定义和性质.2.掌握矩阵的线性运算、乘法、转置以及它们的运算规律,了解方阵的幂与方阵乘积的行列式的性质.3.理解逆矩阵的概念,掌握逆矩阵的性质以及矩阵可逆的充分必要条件,理解伴随矩阵的概念,会用伴随矩阵求逆矩阵.4.了解矩阵的初等变换和初等矩阵及矩阵等价的概念,理解矩阵的秩的概念,掌握用初等变换求矩阵的逆矩阵和秩的方法.5.了解分块矩阵的概念,掌握分块矩阵的运算法则.。二、 实验目的:银行家算法是避免死锁的一种重要方法,通过编写一个简单的银行家算法程序,加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。

多线程和单线程有什么区别?

Icon

对同一个线程没有数据依赖的指令可以重排序优化执行,有数据依赖的指令按照程序顺序执行,从而保证单线程程序运行的正确性。程序流程图:程序逻辑 描述程序中控制流的情况,即程序中处理的执行顺序和执行序列所依赖的条件,图中的有向线段表示的是控制流,从一个处理走到下一个处理。线程它允许一个进程执行一个或多个执行路径(即1个进程可以有多个线程,来执行不同的程序),这些执行路径由系统异步调度。

这个任务其实是在设备空闲期执行的,而且系统设计的这个api不会很耗电,本意是用来执行一些任务调度的,但是我们设想一下,如果用这个类来执行我们的开启双进程,那么也是一定会在设备空闲期执行的,因此我们写一个类继承jobservice,在onstart里声明创建jobscheduler对象,并设置多就执行一次和开机自启动,这样就能确保及时在息屏状态,也能够执行重启进程,所以我们在jobservice的onstopjob方法里判断我们的进程是否被回收了,如果被回收了就重启进程,这样子就可以实现5.0以上的进程保活了。因此在多线程环境中对一个变量进行读写时,我们需要有一种方法能够保证对一个值的递增操作是原子操作——即不可打断性,一个线程在执行原子操作时,其它线程必须等待它完成之后才能开始执行该原子操作。早在单核处理器时期就有多线程,这个时候多线程更多的用于解决线程阻塞造成的用户等待(通常是操作完ui后用户不再干涉,其他线程在等待队列中,cpu一旦空闲就继续执行,不影响用户其他ui操作),其处理能力并没有明显的变化。

线程的四种状态,__、_、_、___。启动调用_方法,启动后会调用__方法。

Icon

四种状态:新(new) 可执行(runnable)堵塞(blocked)死(dead)

启动调用start 启动后调用run

用同步块与同步方法的区别?

Icon

同步方法就是被synchronized修饰的方法linux 多线程面试题,同步整个方法,且整个方法都会被锁住,同一时间只有一个线程可以访问该方法。整个业务,缺点:性能差

同步块就是使用synchronized修饰的代码块,可以同步一小部分代码

同步块越小性能越好,当性能要求比较高时,用同步块

linux 多线程面试题_linux进程线程_linux 线程 pthread_create

写二个线程,对一个int类型一个i++,一个i--

Icon

public class ThreadTest implements Runnable{

@Override

public void run() {

for (int i = 0; i < 10; i++) {

System.out.println("我是子线程"+i);

}

}

public static void main(String[] args) {

Runnable runnable=new ThreadTest();

Thread thread=new Thread(runnable);

thread.start();

for (int i = 10; i >0; i--) {

System.out.println("我是主线程"+i);

}

}

}

说说stop为什么不建议使用。

Icon

1.不能操作线程和线程api(线程api指非线程对象的方法如notify,wait等),2.不能操作awt,3.不能实现服务器功能,4.不能对静态属生存取,5.不能使用io操作直接存取文件系统,6.不能加载本地库.,7.不能将this作为变量和返回,8.不能循环调用。为了区别是否是创建控件的线程访问该控件,windows应用程序中每一个控件对象都有一个invokerequired属性,用来检查是否需要通过调用invoke方法完成其他线程对该控件的操作,如果该属性为true.说明是其他线程操作该控件,这时可以创建一个委托实例,然后调用控件对象的invoke方法,并传入需要的参数完成相应操作,否则可以直接对该控件对象进行操作,从而保证了其他线程安全操作本线程中的控件.。当操作2完成时,我们立即在第2个线程中调用它的完成处理程序(当线程1在忙着响应操作1的处理程序时,线程2可以自由处理任何新进来的操作)。

Runable接口的方法是什么?

什么是同步和异步,分别用例子说明,同步有几种方式?

Icon

同步就是排队去做事情,异步就是各做各的

什么是对象锁?

Icon

对象锁。同一时间只保证 一个线程访问方法或变量。

在Java语言中,通过被关键字synchronized修饰的方法或synchronized语句块实现对代码的同步

上面我们已经讲了wait一定要在同步方法或者同步代码块中,源码中join方法的修饰符就是一个synchronized,表明这是一个同步的方法。对于synchronized修饰的同步代码块,同步监视器是synchronized括号里的对象,所以必须使用该对象调用这三个方法。synchronized(obj){/*将操作共享成员数据tick的语句放到同步代码块中,用object类对象锁住,这样不会出现卖0号票或负数票的情况*/。

ios中对于资源抢占的问题可以使用同步锁nslock来解决,使用时把需要加锁的代码(以后暂时称这段代码为”加锁代码“)放到nslock的lock和unlock之间,一个线程a进入加锁代码之后由于已经加锁,另一个线程b就无法访问,只有等待前一个线程a执行完加锁代码后解锁,b线程才能访问加锁代码。1、当有两个(或以上)线程共同去访问一个object共享对象时,同一时刻只有一个线程可以访问该对象的synchronized(this)同步方法(或同步代码块),也就是说,同一时刻,只能有一个线程能够得到cpu的执行,另一个线程必须等待当前获得cpu执行的线程完成之后才有机会获取该共享对象的锁。(3)线程2的run()方法中同步代码块先获取lock2的对象锁,接着获取lock1的对象锁,当然这时lock1的对象锁已经被线程1锁,线程2肯定是要等待线程1释放lock1的对象锁的。

列子:

同步语句(synchronized statements)的一般形式如下:

synchronized(<锁对象引用>){

…被同步的代码…

}

线程的死锁问题

Icon

死锁就是当有两个或两个以上的线程都获得对方的资源,但彼此有不肯放开,处于僵持状态,此时便造成了死锁。

条件:两个或两个以上的线程

同时想要获取对方的资源,彼此又不肯放开

"5.下列哪个是Runable接口的方法()

Icon

A.run B.start C.yicld D.stop

"

答:A

写一个生产者-消费者模型


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-114186-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...