------
Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
线程的学习
线程;就是进程中独立的控制单元。
线程在控制着进程的执行。执行程序就是在执行线程。多线程就是对一个程序同时处理。
一个进程中至少有一个线程。
java VM 启动时会有一个进程Java.exe.
该进程中至少有一个线程负责Java程序的执行,而且这个线程运行的代码存在于main方法中,该线程称之为主线程。
创建线程的方式:一、继承Thread类。
步骤;1,定义类继承Thread。
2,复写Thread类中的run方法。
目的;将自定义代码存储在run方法中,让线程运行。
3,调用线程的start方法。(该方法有两个作用;启动线程,调用run方法)
Thread类就是对线程的描述,当别的类继承了此类之后,拥有了此类的方法也就成了一个线程。但是自定义线程得运行自己的定义的代码,所以就放在run方法中。
线程在控制着进程的执行。执行程序就是在执行线程。多线程就是对一个程序同时处理。
一个进程中至少有一个线程。
java VM 启动时会有一个进程Java.exe.
该进程中至少有一个线程负责Java程序的执行,而且这个线程运行的代码存在于main方法中,该线程称之为主线程。
创建线程的方式:一、继承Thread类。
步骤;1,定义类继承Thread。
2,复写Thread类中的run方法。
目的;将自定义代码存储在run方法中,让线程运行。
3,调用线程的start方法。(该方法有两个作用;启动线程,调用run方法)
Thread类就是对线程的描述,当别的类继承了此类之后,拥有了此类的方法也就成了一个线程。但是自定义线程得运行自己的定义的代码,所以就放在run方法中。
示例:主线程和一个线程的交替运行。
步骤;
1,定义类实现Runnable接口。
2,覆盖Runnable接口中的run方法。
run方法中存放要运行的代码。
3,通过Thread类建立线程对象。
4,将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。(Thread类中有一个构造函数能接受Runnable接口类型的对象)
5,调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。
实现方式和继承方式的区别;
实现的好处;避免了单继承的局限性。(Java中类只能单继承)
(多线程处理同一个对象,共享同一个资源)
在定义线程时,建议使用实现方式。
class Demo extends Thread
{
public void run()//开启的线程执行
{
for (int x=0;x<60 ;x++ )
{
System.out.println("Demo run -"+x);
}
}
}
class ThreadDemo
{
public static void main(String[] args) //主线程执行main方法中的代码
{
Demo d = new Demo();//创建一个线程但是,没有开启
d.start();//开启线程,并执行线程的run方法
//d.run();没有开启线程,主线程直接运行run方法。
for (int x=0;x<60 ; x++)
{
System.out.println("Hello World!"+x);
}
}
}
创建线程的第二种方式:实现接口Runnable接口
步骤;
1,定义类实现Runnable接口。
2,覆盖Runnable接口中的run方法。
run方法中存放要运行的代码。
3,通过Thread类建立线程对象。
4,将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。(Thread类中有一个构造函数能接受Runnable接口类型的对象)
5,调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。
实现方式和继承方式的区别;
实现的好处;避免了单继承的局限性。(Java中类只能单继承)
(多线程处理同一个对象,共享同一个资源)
在定义线程时,建议使用实现方式。
class Ticket implements Runnable
{
private int tick = 100;
public void run()
{
while (true)
{
if(tick>0)
System.out.println(Thread.currentThread().getName()+".....sale:"+tick--);
}
}
}
class TicketDemo
{
public static void main(String[] args)
{
Ticket t = new Ticket();
Thread t1 = new Thread(t);//创建一个线程
Thread t2 = new Thread(t);
Thread t3 = new Thread(t);
Thread t4 = new Thread(t);//多个线程处理同一个对象
t1.start();
t2.start();
t3.start();
t4.start();
}
}