java线程任务
1. java线程是什么
线程是轻量级进程,只是进程有自己的资源,线程没有。线程属于一个进程与该进程中其它线程共享进程中的资源。
不在前端与用用户进行交互的线程
2. java如何在多线程执行完后才执行其他任务
java.util.concurrent.CountDownLatch 这个类可以实现你所要的功能
例如:CountDownLatch latch = new CountDownLatch(5) //声明计数器为5个
Thread t = new Thread() {
public void run() {
try {
//TODO 你的应用
} catch (Exception e) {
//TODO 异常处理
}
finally {
latch.countDown(); //这句是关键
System.out.println("ok"); //5个线程都跑完后输出
}
}
};
t.start();
然后让以上操作循环五次(就是说同时开5个线程),那么这个"ok"就会在等到这5个线程都ok后才会被输出一次。
3. java启动多个线程执行同一个任务,效率会提高吗
不清楚你用的什么数据库,以mysql做假设,首先确定你的表数据条数,假设row=100W,然后你打算开多少条线程,比如threadCount=20;那么平均分配下来每条线程该处理的条数为avg=100W/20=5W,到这里你就得理解每条线程处理的是表中的那一批数据,比如你的查询是按id字段排序的,那么线程1就是处理1-50000条,线程2就是处理50001-100000,依次类推下去,从这看你可以得到线程n(从1开始计算,表示第几条线程)的一个变量值,offset=(n-1)*50000+1,到此,需要知道的数据都有了:表数据条数 row,线程条数threadCount,每条线程处理的条数avg,每条线程从第几条数据开始处理offset,那么你就可以在每条线程中使用select * from table limit offset,1000这样的语句去一次性查询一批数据来在代码里循环处理,我定的是一次性查1000条,所以在线程没处理完5W条之前,offset每次查询完1000后,offset得加上1000,然后继续select,直到处理完5W条数据
4. java多线程任务一般开多少个线程
一个线程是只能执行一个任务,多个任务需要多线程处理。
多线程将多任务的思想拓展到应用,因此,您可以将单个应用中的特定步骤进一步分解成一个个线程,每个线程可以并行运行。操作系统不仅在不同的应用任务间分配处理时间,而且在一项应用的每个线程间分配处理时间。
工程与科学方面的应用程序通常运行于专用的系统(可能没有多任务化)。而一个多线程NI LabVIEW程序可以被分解成四个线程:用户界面、数据采集、网络通信以及数据录入。您可以分别赋予这四个线程的优先级,以便它们独立工作。于是,在多线程应用中,多项任务可以与该系统执行的其他应用并行执行。
利用多线程的应用具有以下几大优势:
1更有效的CPU利用率
2更好的系统可靠性
3改善多处理器计算机的性能
在许多应用中,您同步地调用资源,如仪器,这些仪器调用时常需要较长的时间完成。在一个单线程应用中,一个同步调用可能会阻止或防止该应用中的其他任务执行,直至该操作完成。而多线程避免了这样的情况出现。
当同步调用在一个线程中运行时,程序中不依赖于该调用的其它部分可以在其它线程中运行。该程序的执行可以持续地推进,而不是停滞直到完成同步调用。这样,一个多线程应用实现了CPU使用效率的最大化,因为当该应用的所有线程都可以同时运行时,CPU不会处于空闲状态。
5. 如何使用Java线程执行定时任务及线程调动和同步
class Mytask1 extends Timertask { ①
public void run() {
System.out.println(”5 秒之后执行的定时器“);
}
}
Class Mytask2 extends Timertask {
public void run(){
System .out,println(”每秒执行的定时器”);
}
}
class Mytask3 extends Timertask {
public void run () {
System.out.println(”从某日起每分钟执行的定时器!”) ;
}
}
public class TimerDemo {
plublic static void main(String[] args) {
Timer timer = new Timer( ) ; ②
timer.schele(new Mytask1( ) ,5000); ③
timer,schele(new Mytask1( ) ,1000,1000) ; ④
timer,schele(new Mytask1( ) ,new Dateo ( ) , 1000 * 60) ; ⑤
}
}
6. java多线程的任务执行问题。
先调用
shutdown
在调用
isTerminated
例:
/*
* 采用线程池开启多个子线程,主线程等待所有的子线程执行完毕
*/
public static void moreThread() {
try {
int threadNum = 0;
for (int i = 0; i < 10; i++) {
threadNum++;
final int currentThreadNum = threadNum;
exe.execute(new Runnable() {
@Override
public void run() {
try {
System.out.println("子线程[" + currentThreadNum + "]开启");
Thread.sleep(1000*10);
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
System.out.println("子线程[" + currentThreadNum + "]结束");
}
}
});
}
System.out.println("已经开启所有的子线程");
exe.shutdown();
System.out.println("shutdown():启动一次顺序关闭,执行以前提交的任务,但不接受新任务。");
while(true){
if(exe.isTerminated()){
System.out.println("所有的子线程都结束了!");
break;
}
Thread.sleep(1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
System.out.println("主线程结束");
}
}
7. 求教高手:java中如何暂停一个线程中的任务,在以后的可以恢复之前任务的执行。
可以用以下几种方法:
interrupt():中断线程
stop():强迫线程停止执行。用 Thread.stop 来终止线程将释放它已经锁定的所有监视器(作为沿堆栈向上传播的未检查 ThreadDeath 异常的一个自然后果)。如果以前受这些监视器保护的任何对象都处于一种不一致的状态,则损坏的对象将对其他线程可见,这有可能导致任意的行为。
yield()只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。yield()只能使同优先级的线程有执行的机会。----这句是重点
3.书上说yelid()是礼让,是让当前执行线程停下来给别的线程资源, 又说没有任何机制保证会这样。----------没有任何机制保证执行yield()的线程一定会把资源让给其它线程。打个比方:两个人抢东西,A抢到了B没有,再把东西放回去重抢,说不定还是A抢到B没有。没有任何机制保证放回去后B一定能抢到
sleep方法使线程睡眠,但是到一定毫秒数时会自动到cpu中等待
wait方法使线程等待,但是不会自动到cpu中等待,要通过notify或者notifyall方法进行唤醒。
以上是让线程等待的方法,你可以选择适合你程序的方法。
8. 用java如何实现10个线程 一起完成15个任务(当一个线程完成了一个任务后 在给它另一个任务)
将15个任务放在一个List中,每个线程都循环从任务List中取得一个任务,然后删除任务List中的这个任务,这个任务完成后继续循环。任务List为空时,表示所有任务都完成,是所有线程都结束还是进行其他操作,就看你需要了。
9. Java中某一特定线程的具体任务在哪个方法中执行
这个程序的执行顺序不不一定的,它的执行顺序还跟线程分的时间片有关
CPU运算的时间 是分时间片 分给不同的线程的 一个线程执行完 或者用完了当前它分到的那个时间片 他就得让出CPU给其他线程使用啦!
线程化是允许多个活动共存于一个进程中的工具。大多数现代的操作系统都支持线程,而且线程的概念以各种形式已存在了好多年。Java 是第一个在语言本身中显式地包含线程的主流编程语言,它没有把线程化看作是底层操作系统的工具。
有时候,线程也称作轻量级进程。就象进程一样,线程在程序中是独立的、并发的执行路径,每个线程有它自己的堆栈、自己的程序计数器和自己的局部变量。但是,与分隔的进程相比,进程中的线程之间的隔离程度要小。它们共享内存、文件句柄和其它每个进程应有的状态。
进程可以支持多个线程,它们看似同时执行,但互相之间并不同步。一个进程中的多个线程共享相同的内存地址空间,这就意味着它们可以访问相同的变量和对象,而且它们从同一堆中分配对象。尽管这让线程之间共享信息变得更容易,但您必须小心,确保它们不会妨碍同一进程里的其它线程。
Java 线程工具和 API 看似简单。但是,编写有效使用线程的复杂程序并不十分容易。因为有多个线程共存在相同的内存空间中并共享相同的变量,所以您必须小心,确保您的线程不会互相干扰。
每个 Java 程序都使用线程
每个 Java 程序都至少有一个线程 ― 主线程。当一个 Java 程序启动时,JVM 会创建主线程,并在该线程中调用程序的 main() 方法。
JVM 还创建了其它线程,您通常都看不到它们 ― 例如,与垃圾收集、对象终止和其它 JVM 内务处理任务相关的线程。其它工具也创建线程,如 AWT(抽象窗口工具箱(Abstract Windowing Toolkit))或 Swing UI 工具箱、servlet 容器、应用程序服务器和 RMI(远程方法调用(Remote Method Invocation))。
10. java 一个线程处理多个任务
一个线程是只能执行一个任务,多个任务需要多线程处理。
多线程将多任务的思想拓展到应用,因此,您可以将单个应用中的特定步骤进一步分解成一个个线程,每个线程可以并行运行。操作系统不仅在不同的应用任务间分配处理时间,而且在一项应用的每个线程间分配处理时间。
工程与科学方面的应用程序通常运行于专用的系统(可能没有多任务化)。而一个多线程NI LabVIEW程序可以被分解成四个线程:用户界面、数据采集、网络通信以及数据录入。您可以分别赋予这四个线程的优先级,以便它们独立工作。于是,在多线程应用中,多项任务可以与该系统执行的其他应用并行执行。
利用多线程的应用具有以下几大优势:
更有效的CPU利用率
更好的系统可靠性
改善多处理器计算机的性能
在许多应用中,您同步地调用资源,如仪器,这些仪器调用时常需要较长的时间完成。在一个单线程应用中,一个同步调用可能会阻止或防止该应用中的其他任务执行,直至该操作完成。而多线程避免了这样的情况出现。
当同步调用在一个线程中运行时,程序中不依赖于该调用的其它部分可以在其它线程中运行。该程序的执行可以持续地推进,而不是停滞直到完成同步调用。这样,一个多线程应用实现了CPU使用效率的最大化,因为当该应用的所有线程都可以同时运行时,CPU不会处于空闲状态。