----------------------<a href="http://edu.csdn.net/heima"target="blank">android培训</a>、<a href="http://edu.csdn.net/heima"target="blank">java培训</a>、期待与您交流! ----------------------
一、线程的基本概念
简单的说:线程就是一个程序里不同的执行路径
在同一个时间点上cpu只会有一个线程在执行
Java里的多线程是通过java.lang.Thread类来实现的
每个线程都拥有自己独立的方法栈空间
二、java线程的创建和启动
第一种
定义线程类实现Runnable接口
Thread myThread = new Thread(target) //target为Runnable接口类型
Runnable中只有一个方法:
public void run();用以定义线程运行体
第二种
可以定义一个Thread的子类并重写其run方法:
clas MyThread extends Thread{
public void run(){}
}
线程类必须通过执行Thread的start()方法启动一个新的线程
如果调用run()方法是属于方法的调用,不会启动一个新的线程
class Test extends Thread
{
private String name;
Test(String name)
{
this.name=name;
//super(name);
}
public void run()
{
for(int i=0;i<70;i++)
{
System.out.println(name+"...."+i);
System.out.println(Thread.currentThread().getName()+"...."+i);
//static Thread currrentThread() 获取线程的对象
}
}
}
public class Text
{
public static void main(String[] args)
{
Test t1 = new Test("one");
Test t2 = new Test("two");
t1.start();
t2.start();
//t1.run();
//t2.run();
for(int i=0;i<70;i++)
{
System.out.println("main...."+i);
}
}
}
三、线程同步
实现java.lang.Runnable接口
每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程。每个线程都可以或不可以标记为一个守护程序。当某个线程中运行的代码创建一个新 Thread 对象时,该新线程的初始优先级被设定为创建线程的优先级,并且当且仅当创建线程是守护线程时,新线程才是守护程序。
当 Java 虚拟机启动时,通常都会有单个非守护线程(它通常会调用某个指定类的 main 方法)。Java 虚拟机会继续执行线程,直到下列任一情况出现时为止
同步代码块
synchronized(this){ //在执行代码块过程中,不会被其他线程打断
...
}
class Tick implements Runnable
{
private int tick=100;
Object obj = new Object();
boolean flag = true;
public void run()
{
if(flag)
{
while(true)
{
synchronized(this)
{
if(tick>0)
{
try{Thread.sleep(10);}catch(Exception e){}
System.out.println(Thread.currentThread().getName()+"...,,.."+tick--);
//static Thread currrentThread() 获取线程的对象
}
}
}
}
else
while(true)
show();
}
public synchronized void show()
{
if(tick>0)
{
try{Thread.sleep(10);}catch(Exception e){}
System.out.println(Thread.currentThread().getName()+"...,,.."+tick--);
//static Thread currrentThread() 获取线程的对象
}
}
}
public class Text
{
public static void main(String[] args)
{
Tick t =new Tick();
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
// Thread t3 = new Thread(t);
// Thread t4 = new Thread(t);
t1.start();
try{Thread.sleep(10);}catch(Exception e){}
t.flag =false;
t2.start();
// t3.start();
// t4.start();
}
}
----------------------<a href="http://edu.csdn.net/heima"target="blank">android培训</a>、<a href="http://edu.csdn.net/heima"target="blank">java培训</a>、期待与您交流! ----------------------