线程是每个进程的控制单元。
多线程技术提高运行效率。
1. 单线程程序:
class ThreadDemo
{
private String name;
ThreadDemo(String name)
{
this.name = name;
}
public void show()
{
for(int x=0;x<40;x++)
{
System.out.println("name:"+name);
}
}
}
class ThreadDemoMain
{
public static void main(String[] args)
{
ThreadDemo d1 = new ThreadDemo("one");
ThreadDemo d2 = new ThreadDemo("two");
d1.show();
d2.show();
}
}
产生的问题two 的打印是在 one 结束之后才执行。
/*
如何创建一个控制单元,或者创建线程?
Thread类下的void run();方法,如果该线程是使用独立的Runnable 运行对象构造的,则调用该Runnable对象的 run 方法;否则,该方法不执行任何操作并返回。
void start();方法,使该线程开始执行;Java虚拟机调用该线程的run方法。
创建第一种方式:
1,继承Thread类。
覆盖run方法.将多线程要运行的代码存放在run方法中。
调用start方法,开启线程,并执行run方法。
特性:随机性。
*/
2. 多线程
class ThreadDemo extends Thread
{
private String name;
ThreadDemo(String name)
{
this.name = name;
}
public void run()
{
for(int x=0;x<40;x++)
{
for(int y = 9999999; y<999999999; y++){} //添加一个延迟看结果
System.out.println(Thread.currentThread().getName()+"name:"+name);
}
}
}
class ThreadDemoMain
{
public static void main(String[] args)
{
ThreadDemo d1 = new ThreadDemo("one"); //线程被创建但是没有执行
ThreadDemo d2 = new ThreadDemo("two");
d1.start(); //启用多线程
d2.start();
for(int x=0; x<40;x++)
{
System.out.println(Thread.currentThread().getName()+"......");
}
}
}
/*三个线程在同时抢资源,区分线程
static Thread current Thread()方法 返回对当前正在执行的线程对象的引用。
String getName()方法 返回该线程的名称。
*/
/*
线程创建的第二种方式;
实现Runnable接口,覆盖run方法。子类不是线程对象。
通过Thread类建立线程对象,并将实现Runnable接口的子类对象作为参数传递给Thread类的构造函数。调用Thread类对象start方法,开启并运行run方法。
为什么要将Runnable接口的子类对象作为参数传给Thread类的够做方法呢?
为了让多线程去执行自定义的run方法,该run方法有自己所属的对象,所以将该对象传入。
*/
/*四个窗口共卖100张票,实现方法*/
class Ticket implements Runnable
{
private int num = 100;
public void run()
{
while(true)
{
if(num>0)
{
System.out.println(Thread.currentThread().getName()+"..."+num--);
}
}
}
}
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 t3 = new Thread(t);
t1.start();
t2.start();
t3.start();
t4.start();
}
}