java线程由什么组成,Java线程:什么是线程
这篇文章给大家聊聊关于java线程由什么组成,以及Java线程:什么是线程对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。
Java线程的概念与原理
一操作系统中线程和进程的概念
现在的操作系统是多任务操作系统多线程是实现多任务的一种方式
进程是指一个内存中运行的应用程序每个进程都有自己独立的一块内存空间一个进程中可以启动多个线程比如在Windows系统中一个运行的exe就是一个进程线程是指进程中的一个执行流程一个进程中可以运行多个线程比如java exe进程中可以运行很多线程线程总是属于某个进程进程中的多个线程共享进程的内存同时执行是人的感觉在线程之间实际上轮换执行
二 Java中的线程
在Java中线程指两件不同的事情
java lang Thread类的一个实例
线程的执行
使用java lang Thread类或者java lang Runnable接口编写代码来定义实例化和启动新线程一个Thread类实例只是一个对象像Java中的任何其他对象一样具有变量和方法生死于堆上 Java中每个线程都有一个调用栈即使不在程序中创建任何新的线程线程也在后台运行着一个Java应用总是从main()方法开始运行 mian()方法运行在一个线程内它被称为主线程一旦创建一个新的线程就产生一个新的调用栈线程总体分两类用户线程和守候线程
当所有用户线程执行完毕的时候 JVM自动关闭但是守候线程却不独立于JVM守候线程一般是由操作系统或者用户自己创建的
———————————MultiT java——————————————————————
class MultiThread
{
public static void main(String[] args)
{
MyThread mt=new MyThread();
//mt setDaemon(true);//设定为后台线程 main进程结束时后台进程也跟着结束
//mt setPriority(Thread MAX_PRIORITY);//设定线程优先级 MAX_PRIORITY为 MIN_PRIORITY为 NORM_PRIORITY为
//设定为最高优先级后程序运行时 mt线程一直运行强制终止时 main线程才运行
//设定为最高优先级的线程无论有无yield();线程总一直运行直到强制终止时 main和mt线程交替运行
mt start();
int index=;
while(true)//显示结果与教程不同
{
if(index++==)
break;
System out println( main:+Thread currentThread() getName());//获取线程名字
}
}
}
class MyThread extends Thread
{
public void run()
{
while(true)
{
System out println(getName());
yield();//允许当前线程停止转去执行其他线程静态方法
//mt进程执行时切换到main进程 main进程执行一段时间后
//切换进程到mt mt执行完获取名字后返回到main进程
}
}
}
//一个长时间处于等待状态的线程也有可能被线程调度器调度从而运行
//打破高优先级线程始终获有运行时间的状态
——————————————————————————————————————
——————————MultiThread java———————————————————————
class MultiThread
{
public static void main(String[] args)
{
MyThread mt=new MyThread();
//new Thread(mt) start();//创建多个同样的线程访问同一个变量index若MyThread采用继承Thread方式则无法共享同一个变量
//new Thread(mt) start();
//new Thread(mt) start();
//new Thread(mt) start();
mt getThread() start();//也可以采用内部类的方式共享访问同一个变量
mt getThread() start();
mt getThread() start();
mt getThread() start();
//mt setDaemon(true);//设定为后台线程 main进程结束时后台进程也跟着结束
//mt setPriority(Thread MAX_PRIORITY);//设定线程优先级 MAX_PRIORITY为 MIN_PRIORITY为 NORM_PRIORITY为
//设定为最高优先级后程序运行时 mt线程一直运行强制终止时 main线程才运行
//设定为最高优先级的线程无论有无yield();线程总一直运行直到强制终止时 main和mt线程交替运行
//mt start();
int index=;
while(true)//显示结果与教程不同
{
// if(index++==)
// break;
System out println( main:+Thread currentThread() getName());//获取线程名字
}
}
}
class MyThread//implements Runnable//extends Thread//使用外部类的方式
//使用内部类完成使用Runnable接口才能完成的两个功能 a创建多个线程 b访问同一个变量
{
int index=;
private class InnerThread extends Thread//不想让外部访问其实现方法加上private
{
public void run()
{
while(true)
{
System out println(Thread currentThread() getName()+:+index++);
}
}
}
Thread getThread()
{
return new InnerThread();
}
/*
public void run()
{
while(true)
{
System out println(Thread currentThread() getName()+:+index++);
//yield();//允许当前线程停止转去执行其他线程静态方法
//mt进程执行时切换到main进程 main进程执行一段时间后
//切换进程到mt mt执行完获取名字后返回到main进程
}
}
*/
}
//一个长时间处于等待状态的线程也有可能被线程调度器调度从而运行
//打破高优先级线程始终获有运行时间的状态
//如果不需要修改Thread类的除了run方法外的其他方法选用implements Runnable
———————————————————————————————————————
———————————TicketsSystem java———————————————————
//多线程实现火车票的售票系统用同步块或著同步方法
class TicketsSystem
{
public static void main(String[] args)//运行结果与教程中不同不完全顺序每次运行顺序都不完全一样
{
SellThread st=new SellThread();//创建四个线程访问同一变量tickets
//错 SellThread st=new SellThread();//若采用创建四个对象的方式则每个对象中都有张票
new Thread(st) start();//b为false用的同步方法|//同步方法与同步块共用中显示的是只调用了同步块而同步方法未被调用
//b为true用的同步块|//原因启动第一个线程后 CPU时间片没有到期线程没有立即运行接着执行b=true
//|//解决办法启动第一个线程后执行一个睡眠时间让CPU时间片到期
try
{
Thread sleep();
}
catch(Exception e)
{
e printStackTrace();
}
st b=true;
new Thread(st) start();
//new Thread(st) start();
//new Thread(st) start();
}
}
class SellThread implements Runnable//程序有点小问题当剩下最后一张票时四个线程都运行可能会出现票数为(系统长时间运行时)
//可加上一个静态方法sleep();它会抛出异常
{
int tickets=;
//Object obj=new Object();//也可以声明一个Thread对象
Thread th=new Thread();
boolean b=false;
public void run()
{
if(b==false)
{
while(true)
sell();
}
else
{
while(true)
{//同步方法利用的是this所代表的对象的锁
synchronized(this)//采用同步后显示正确此方法两步声明Thread对象用synchronized把原方法括起来
{//这里换th为this
///*
if(tickets>)
{
try
{
Thread sleep();
}
catch(Exception e)
{
e printStackTrace();
}
System out println( th+Thread currentThread() getName()+ sell tickets:+tickets);
tickets;
}
//*/
}
}
}
}
public synchronized void sell()//每个class也有一个锁是这个class所对应的class对象的锁(监视器)
{
if(tickets>)
{
try
{
Thread sleep();
}
catch(Exception e)
{
e printStackTrace();
}
System out println( sell+Thread currentThread() getName()+ sell tickets:+tickets);
tickets;
}
}
}
————————————————————————————————————————
———————————TestWN java————————————————————
class Test
{
public static void main(String[] args)
{
Queue q=new Queue();
Producer p=new Producer(q);
Consumer c=new Consumer(q);
p start();
c start();
}
}
class Producer extends Thread
{
Queue q;
Producer(Queue q)
{
this q=q;
}
public void run()
{
for(int i=;i<;i++)
{
q put(i);
System out println( Producer put:+i);
}
}
}
class Consumer extends Thread
{
Queue q;
Consumer(Queue q)
{
this q=q;
}
public void run()
{
while(true)
{
System out println( Consumer get:+q get());
}
}
}
class Queue//wait notify方法必须用在同步方法中要加上关键字synchronized
{
int value;
boolean bFull=false;
public synchronized void put(int i)
{
if(!bFull)
{
value=i;
bFull=true;
notify();
}
try
{
wait();
}
catch(Exception e)
{
e printStackTrace();
}
}
public synchronized int get()
{
if(!bFull)
{
try
{
wait();
}
catch(Exception e)
{
e printStackTrace();
}
}
bFull=false;
notify();
return value;
}
}
————————————————————————————————————
————————————TestThread java———————————————————————
class TestThread
{
public static void main(String[] args)
{
Thread t=new Thread();
t start();
int index=;
while(true)
{
if(index++==)
{
t stopThread();
t interrupt();//让线程终止
break;
}
System out println(Thread currentThread() getName());
}
System out println( main() exit);
}
}
class Thread extends Thread
{
private boolean bStop=false;
public synchronized void run()
{
while(!bStop)
{
try
{
wait();//加入wait后 main线程结束时程序还未终止原因是Thread的线程调用wait方法进入对象的等待队列中需要notify方法将它唤醒
}
catch(Exception e)
{
//e printStackTrace();
if(bStop)
return;
}
System out println(getName());
}
}
public void stopThread()
{
bStop=true;
}
}
lishixinzhi/Article/program/Java/gj/201311/27407Java线程:什么是线程
线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。就绪状态是指线程具备运行的所有条件,逻辑上可以运行,在等待处理机;运行状态是指线程占有处理机正在运行;阻塞状态是指线程在等待一个事件(如某个信号量),逻辑上不可执行。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。
截取于百度百科:http://baike.baidu.com/item/%E7%BA%BF%E7%A8%8B
在java里面什么是线程,什么是主线程主线程和子线程的关系
首先,java里的线程没有主和子的说法,只有线程优先级的说法,也许你说的是进程和线程吧,下面是详细资料
线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别:
(1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间;
(2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源
(3)线程是处理器调度的基本单位,但进程不是.
(4)二者均可并发执行.
进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于:
简而言之,一个程序至少有一个进程,一个进程至少有一个线程.
线程的划分尺度小于进程,使得多线程程序的并发性高。
另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.
一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.
关于java线程由什么组成和Java线程:什么是线程的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。