一 什么是线程和进程
1 进程就是一个对立运行的程序,例如qq 快播 网页.
2 在进程中是可以包含多个线程的,线程就是一个程序内部的执行线索,就相当对QQ聊天的时候向对方发送信息不一定先要等对方发信息给我,聊天里面的接受和发送就是在两个在同一个进程里的线程。
1 进程就是一个对立运行的程序,例如qq 快播 网页.
2 在进程中是可以包含多个线程的,线程就是一个程序内部的执行线索,就相当对QQ聊天的时候向对方发送信息不一定先要等对方发信息给我,聊天里面的接受和发送就是在两个在同一个进程里的线程。
二 Thread类来创建线程
public class ThreadDemo2
{
public static void main(String args)
{
new TestThread().start();//调用TestThread()中的start函数(这个函数是从Thread中继承过来的,他会开启一个线程),这个是就是的start方法将会产生一个新的线程,这个时候线程就会去运行Thread类对象中的Run方法,根据面向对象的多态性,在该线程实际运行的就是Thread子类的run 方法。
while(true){}
}
}
class TestThread extends Thread
{
}
1 特点 一次只能够创建一个线程,
三 Runnable接口创建多线程
public static void main(String args)
{
Thread t=new Thread(new RunnableDemo);//
t.start();
}
class RunnableDemo
{}
2 优点 :a 多个相同的程序代码的线程去处理同一线程。
b 可以避免java单继承的局限性。如有时这个类在继承其他类的同时,想要在拥有多线程二只有放弃以前的情况。
c 有利于代码的健壮性。
四 Thread类和Runnable的区别
1 在买票的例子里面,会发现继承Thread类的买票程序所创建的4个线程所买的票不是共同的100张票,而是每个线程都拥有100张票,出现这杨的原因是我们创建了4个的对象,反观继承了Runnable接口他只创建了一个对象,在这个对象的买票进程中在创建了4个线程,这4个线程是共同操纵那100张票,也就是线程调用的都是同一个对象的方法。
五 后台线程与联合线程
1 后台线程 当一个程序的main的主线程结束了但由于其他线程还在运行导致他的main()不能够结束。但是如果我们在启动某个线程前先条用setDaemon(true),那么这个线程也就变成了后台线程,在程序中剩下后台线程时,程序也会结束。
2 联合线程
class Demo
{
public static void main(String[] args)
{
Test t=new Test();
Thread tt=new Thread(t);
tt.start();//把tt线程合并到条用他的线程。
int i=0;
while (true)
{
if(i==100)//在i!=100的之前,tt这个线程是和主线程交替执行的,但是当i==100的时候,由于这个时候把tt并如主线程所以主线程先会等tt线程执行完代码后在执行主线程的。
{ try
{
tt.join();
}
catch(Exception e){}
}
System.out.println(Thread.currentThread().getName()+"100"+i++);
}
}
}
class Test implements Runnable
{
public void run()
{ int tickets =100;
while(true)
{
System.out.println(Thread.currentThread().getName()+"0000");
}
}
}
六 同步代码块与同步函数
1 什么是同步代码块;
2 是么是同步函数;
3 在同步代码块与同步函数之间进行同步。
public class ThreadDemo2
{
public static void main(String args)
{
new TestThread().start();//调用TestThread()中的start函数(这个函数是从Thread中继承过来的,他会开启一个线程),这个是就是的start方法将会产生一个新的线程,这个时候线程就会去运行Thread类对象中的Run方法,根据面向对象的多态性,在该线程实际运行的就是Thread子类的run 方法。
while(true){}
}
}
class TestThread extends Thread
{
}
1 特点 一次只能够创建一个线程,
三 Runnable接口创建多线程
public static void main(String args)
{
Thread t=new Thread(new RunnableDemo);//
t.start();
}
class RunnableDemo
{}
2 优点 :a 多个相同的程序代码的线程去处理同一线程。
b 可以避免java单继承的局限性。如有时这个类在继承其他类的同时,想要在拥有多线程二只有放弃以前的情况。
c 有利于代码的健壮性。
四 Thread类和Runnable的区别
1 在买票的例子里面,会发现继承Thread类的买票程序所创建的4个线程所买的票不是共同的100张票,而是每个线程都拥有100张票,出现这杨的原因是我们创建了4个的对象,反观继承了Runnable接口他只创建了一个对象,在这个对象的买票进程中在创建了4个线程,这4个线程是共同操纵那100张票,也就是线程调用的都是同一个对象的方法。
五 后台线程与联合线程
1 后台线程 当一个程序的main的主线程结束了但由于其他线程还在运行导致他的main()不能够结束。但是如果我们在启动某个线程前先条用setDaemon(true),那么这个线程也就变成了后台线程,在程序中剩下后台线程时,程序也会结束。
2 联合线程
class Demo
{
public static void main(String[] args)
{
Test t=new Test();
Thread tt=new Thread(t);
tt.start();//把tt线程合并到条用他的线程。
int i=0;
while (true)
{
if(i==100)//在i!=100的之前,tt这个线程是和主线程交替执行的,但是当i==100的时候,由于这个时候把tt并如主线程所以主线程先会等tt线程执行完代码后在执行主线程的。
{ try
{
tt.join();
}
catch(Exception e){}
}
System.out.println(Thread.currentThread().getName()+"100"+i++);
}
}
}
class Test implements Runnable
{
public void run()
{ int tickets =100;
while(true)
{
System.out.println(Thread.currentThread().getName()+"0000");
}
}
}
六 同步代码块与同步函数
1 什么是同步代码块;
2 是么是同步函数;
3 在同步代码块与同步函数之间进行同步。
七 线程安全问题
1 Thread的函数
sleep();interrupt().
2 synchronized(obj)
3 出现的原因是由于线程的代码
5 几种常见的安全问题
a 对于共享资源和锁旗标的对象都不能够定义在run方法中,当把这共享资源定义在run方法中时产生的安全问题和用Thread类的子类创建的多线程一样,也就是几个线程所操作的对象不是同一个资源, 当锁起标定义在run方法中时由于锁旗标的对象不是一个对象会出现对票的重复操作。
1 Thread的函数
sleep();interrupt().
2 synchronized(obj)
3 出现的原因是由于线程的代码
5 几种常见的安全问题
a 对于共享资源和锁旗标的对象都不能够定义在run方法中,当把这共享资源定义在run方法中时产生的安全问题和用Thread类的子类创建的多线程一样,也就是几个线程所操作的对象不是同一个资源, 当锁起标定义在run方法中时由于锁旗标的对象不是一个对象会出现对票的重复操作。
八 线程间的通信
1 线程间的通信是不是可以看成是一种线程同步的扩展。
2 怎么做到线程之间的通信。
3 常用方法 wait() notify() notifyAll() intrrrupt()
九 线程的生命周期
1 线程产生与消亡的过程:一个线程的产生是从条用start()开始的,这时的线程处于一个可以被调度的状态,调度器可以将CPU分给他,真正运行其中的代码。
2 线程产生后的几种状态
a 没有遇到任何阻塞,直接运行结束。
b 调度器没有将cpu分配给他,这个线程又处于Runnable状态。
c 在请求锁旗标,把锁旗标请求好以后会进入runnable状态开始运行。
d 遇到了wite(会释放掉锁旗标吗),他会被放入线程池中,直到被notify或者interrupt后太再去等待锁旗标,等待进入Runnable状态继续执行。
1 线程间的通信是不是可以看成是一种线程同步的扩展。
2 怎么做到线程之间的通信。
3 常用方法 wait() notify() notifyAll() intrrrupt()
九 线程的生命周期
1 线程产生与消亡的过程:一个线程的产生是从条用start()开始的,这时的线程处于一个可以被调度的状态,调度器可以将CPU分给他,真正运行其中的代码。
2 线程产生后的几种状态
a 没有遇到任何阻塞,直接运行结束。
b 调度器没有将cpu分配给他,这个线程又处于Runnable状态。
c 在请求锁旗标,把锁旗标请求好以后会进入runnable状态开始运行。
d 遇到了wite(会释放掉锁旗标吗),他会被放入线程池中,直到被notify或者interrupt后太再去等待锁旗标,等待进入Runnable状态继续执行。
</p>---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------详细请查看:http://edu.youkuaiyun.com