
class ThrDemo extends Thread
{
public void run() //重写Thread类中的run方法
{
System.out.println("线程");
}
}
class Demo
{
public static void main(String[] args)
{
ThrDemo t = new ThrDemo();
t.start(); //调用Thread类中的start方法
// 使该线程开始执行;Java 虚拟机调用该线程的 run 方法。
}
}
//推荐使用 接口 采用implements 弥补 单继承的缺陷
class ThrDemo implements Runnable
{
public void run() //重写Runnable接口中的run方法
{
for (int a=1;a<100 ;a++ )
{
System.out.println("你好"+Thread.currentThread().getName());
//public static Thread currentThread()
//返回对当前正在执行的线程对象的引用。
}
}
}
class Demo
{
public static void main(String[] args)
{
ThrDemo td = new ThrDemo();
Thread t1 = new Thread(td);
Thread t2 = new Thread(td);
Thread t3 = new Thread(td);
t1.start(); //调用Runnable类中的start方法
t2.start();
t3.start();
}
}
synchronized(obj)//同步代码块 锁,解决了多线程安全问题,但是消耗资源。
// 同步函数的锁是this,静态同步函数锁是class对象
{
}
public synchronized void m() //this
/*
进程 正在进行中的程序
每一个进程执行都有一个执行顺序,该顺序是一个执行路径
线程:就是进程中的一个独立的控制单元。
线程在控制着进程的执行。
一个进程中至少有一个线程。
JVM启动的时候会有一个java.exe
该进程 至少一个线程负责java程序的执行。
而且这个线程运行的代码存在main方法中。
该线程称之为主线程。
多线程:同时对多个任务加以控制
随机性 谁抢到谁执行
sleep(time) try catch thorws
wait()
notify();
stop();
static Thread currentThread() 获取当前线程对象。
getName();获取线程名称
setName 设置线程名称
构造函数
synchromized(obj) //同步锁
{
}
同步的前提:必须有两个或两个以上的线程
多个线程必须使用同一个锁
共享的数据,必须同步。
虽然解决了安全问题,但是消耗资源。
同步函数~用的是this锁
如果同步函数被静态修饰后,使用的锁是 该类对应的字节码文件对象。 类名.class
class会封装成 字节码文件对象 (唯一)
object this 类名.class
class fu extends Thread
{
private String name;
fu(String name)
{
this.name=name;
}
public void run()
{
for(int a=1;a<100;a++)
System.out.println(this.getName()+" "+name);
}
}
class zi
{
public static void main(String[] args)
{
fu f = new fu("张三");
fu fs = new fu("李四");
f.start();
fs.start();
//System.out.println( str);
// for(int a=1;a<100;a++)
// System.out.println("朱一");
}
}*/
/*
需求:简单的卖票程序
多个窗口卖票
*/
class Ticket implements Runnable
{
private static int tick =100;
public void run()
{
while(true)
{
if(tick>0)
{
System.out.println("售票"+tick--);
}
}
}
}
class demo
{
public static void main(String[] args)
{
/*
Ticket t1 = new Ticket();
Ticket t2 = new Ticket();
Ticket t3 = new Ticket();
t1.start();
t2.start();
t3.start();*/
Ticket t1 = new Ticket();
Thread ts = new Thread(t1);
Thread ts2 = new Thread(t1);
Thread ts3 = new Thread(t1);
ts.start();
ts2.start();
ts3.start();
}
}