线程的概念:Thread 每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。进程也可能是整个程序或者是部分程序的动态执行。
多线程的概念: 多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。
多线程的特点:使用线程可以把占据长时间的程序中的任务放到后台去处理
用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以d出一个进度条来显示处理的进度 。
程序的运行速度可能加快 ·在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。
在这种情况下我们可以释放一些珍贵的资源如内存占用等等。
线程定义比较抽象,简单的说就是一个代码执行流。许多执行流可以混合在一起由CPU调度。线程是允许各种任务交互执行的方式。
Java的线程在 *** 作系统的实现模式依系统不同而不同,可能是系统级别的进程或线程,但对于程序员来说并没有影响。
任务交互的一个好处是增加程序响应。如一个界面程序执行一段耗时的数据库查询,使用单独的线程可以让界面依然响应用户的其他输入,而单线程只能等待查询结束再处理。
JVM以及 *** 作系统会优先处理优先级别高的线程,但不代表这些线程一定会先完成。设定优先级只能建议系统更快的处理,而不能强制。
另外,在运行时,并没有按照函数分界,而是按照机器码/汇编码分界。也就是说不保证任何一段代码是被完整而不打断的执行的(除非你已经使用同步手段)。正由于如此,各种线程同步的方法应运而生。
进程,是针对于 *** 作系统而言的线程,是java中一个重要的类,主要用来多个方法一起执行进程和线程都是由 *** 作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于:简而言之,一个程序至少有一个进程,一个进程至少有一个线程线程的划分尺度小于进程,使得多线程程序的并发性高。另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但 *** 作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行
import javautilScanner;
import javautilconcurrentlocksReentrantLock;
public class example8_4a {
public static void main(String args[ ]){
String tname1="线程1(放货X个到仓库)",tname2="线程2(从仓库取出货物Y个)";
storage sto=new storage(tname1,tname2);
Thread t1,t2;
t1=new Thread(sto);
t2=new Thread(sto); //t1和t2是同一目标对象
t1setName(tname1);
t2setName(tname2);
stosetdata(100); //线程的目标对象修改被线程共享的data
t1start();
t2start();
}
}
class storage implements Runnable{ //storage类必须实现Runnable接口
private final ReentrantLock lock = new ReentrantLock();
private int data=0;
String thname1,thname2;
storage(String tname1,String tname2){
thname1=tname1;
thname2=tname2;
}
public void setdata(int num){
data=num;
}
public void run(){
while(true){
locklock();
Systemoutprintln("仓库原有货物100,请输入此次放货数量:");//接口中的方法
Scanner reader=new Scanner(Systemin);//从键盘读取数据
int x=readernextInt();
Systemoutprintln("请输入取出货物数量:");
int y=readernextInt();
data=data+x-y;
/ while(readerhasNextInt()){}/
if(ThreadcurrentThread()getName()equals(thname1)){
Systemoutprintln(thname1+" *** 作后,还有"+data);
if(data>200){
Systemoutprintln(thname1+"进入结束状态");
return; //如果data大于200,当前线程结束run方法
}
}
else if(ThreadcurrentThread()getName()equals(thname2)){
Systemoutprintln(thname2+" *** 作后,还有"+data);
if(data<0){
Systemoutprintln(thname2+"进入结束状态");
return; //如果data小于0,当前线程结束run方法
}
}
lockunlock();
try{ Threadsleep(100);
}
catch(InterruptedException e) {
lockunlock();
}
}
}
}
以上就是关于java中什么叫做线程什么叫多线程多线程的特点是什么全部的内容,包括:java中什么叫做线程什么叫多线程多线程的特点是什么、怎么区分java程序中的单线程与多线程、Java编写线程程序实现以下内容:等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)