java 什么时候考虑用线程,在用java开发程序中什么时候应用到线程
今天给各位分享java 什么时候考虑用线程的知识,其中也会对在用java开发程序中什么时候应用到线程进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
什么是线程组,为什么java中不推荐使用
首先要明确的是,如同数据库的连接和建立一样,线程的启动和停止对JVM和操作系统而言都是一件开销很大的事情。
线程池的目的就是为了避免线程被频繁的创建,启动和停止。
而之所以要提出“线程组”的概念,很难从字面上找到原因。这多少为我们讨论的主题带来了一些混乱。一般地说,我们认为是由于“安全”或者“保密”方面的理由才使用线程组的。根据Arnold和Gosling的说法:“线程组中的线程可以修改组内的其他线程,包括那些位于分层结构最深处的。一个线程不能修改位于自己所在组或者下属组之外的任何线程”(注释①)。然而,我们很难判断“修改”在这儿的具体含义是什么。下面这个例子展示了位于一个“叶子组”内的线程能修改它所在线程组树的所有线程的优先级,同时还能为这个“树”内的所有线程都调用一个方法。
在用java开发程序中什么时候应用到线程
一般需要独立运行某个东西的时候会用到线程
我用过的就是端口监听的时候
比如说你的程序在200端口上设置另一个监听,当有数据通过这个端口传输的时候就会被监听程序所获取但是如何保证实时监听?这个就需要有个线程独立的来执行这个工作保持监听的状态。
再比如说你需要做一个任务处理的程序当数据库中有新任务时候就进行处理/或者XX路径下出现新的文件就进行处理,这个时候也需要用到线程来实时扫描数据库或者是文件路径,来保证任务能够得到及时的处理
线程在java编程中的作用
线程在java编程中的作用可以实现多个任务同时进行。java创建线程的方式最常用的有两种。
1、第一种是创建Thread子类的一个实例并重写run方法,run方法会在调用start()方法之后被执行。例子如下:
publicclassMyThreadextendsThread{
publicvoidrun(){
System.out.println("MyThreadrunning");
}
}
MyThreadmyThread=newMyThread();
myTread.start();
2、第二种编写线程执行代码的方式是新建一个实现了java.lang.Runnable接口的类的实例,实例中的方法可以被线程调用。下面给出例子:
publicclassMyRunnableimplementsRunnable{
publicvoidrun(){
System.out.println("MyRunnablerunning");
}
}
Threadthread=newThread(newMyRunnable());
thread.start();
JAVA中线程在什么时候需要同步和互斥
何时需要同步
在多个线程同时访问互斥(可交换)数据时,应该同步以保护数据,确保两个线程不会同时修改更改它。
对于非静态字段中可更改的数据,通常使用非静态方法访问
对于静态字段中可更改的数据,通常使用静态方法访问。
1、线程同步的目的是为了保护多个线程反问一个资源时对资源的破坏。
2、线程同步方法是通过锁来实现,每个对象都有切仅有一个锁,这个锁与一个特定的对象关联,线程一旦获取了对象锁,其他访问该对象的线程就无法再访问该对象的其他非同步方法。
3、对于静态同步方法,锁是针对这个类的,锁对象是该类的Class对象。静态和非静态方法的锁互不干预。一个线程获得锁,当在一个同步方法中访问另外对象上的同步方法时,会获取这两个对象锁。
4、对于同步,要时刻清醒在哪个对象上同步,这是关键。
5、编写线程安全的类,需要时刻注意对多个线程竞争访问资源的逻辑和安全做出正确的判断,对“原子”操作做出分析,并保证原子操作期间别的线程无法访问竞争资源。
6、当多个线程等待一个对象锁时,没有获取到锁的线程将发生阻塞。
7、死锁是线程间相互等待锁锁造成的,在实际中发生的概率非常的小。真让你写个死锁程序,不一定好使,呵呵。但是,一旦程序发生死锁,程序将死掉。
使用锁定还有一些其他危险,如死锁(当以不一致的顺序获得多个锁定时会发生死锁)。甚至没有这种危险,锁定也仅是相对的粗粒度协调机制,同样非常适合管理简单操作,如增加计数器或更新互斥拥有者。如果有更细粒度的机制来可靠管理对单独变量的并发更新,则会更好一些;在大多数现代处理器都有这种机制。
OK,关于java 什么时候考虑用线程和在用java开发程序中什么时候应用到线程的内容到此结束了,希望对大家有所帮助。