JAVA 线程基础
要创建一条线程,有两种方式:
1、实现Runnable接口;
2、继承Thread类;
第一种方式:实现Runnable接口,并实现run方法,然后以这个Runnable对象作为参数实例化Thread,然后调用start方法启动线程(要想启动线程必须实例化Thread对象,并调用start方法);
第二种方式:直接继承Thread类,重写run方法,实例化时可指定名字,然后调用start方法启动线程;
多线程操作中常用的方法:
1、getName,setName,获取线程的名字,设置线程的名字,注意,不要在线程启动后再设置线程的名字;
2、Thread.currentThread,获取当前的线程对象;
3、sleep,线程休眠,参数单位为毫秒;
4、wait,线程等待,待其他线程通过调用其notify或notifyAll方法才能将其唤醒;
5、isAlive,判断线程是否处于非死亡状态;
6、join,强行独占资源,线程占用全部资源,独自运行;
7、interrupt,把线程设置成中断状态,该操作仅仅把线程设置成中断状态(以后再详细补充);
同步:
被synchronized修饰的代码块和方法在一个时间段内只能被一个线程运行,避免了不同步时发生的错误;
死锁:
线程之间互相等待,进入死锁状态,都不能进行下去;
线程的生命周期:
创建,就绪,运行,阻塞,死亡;
程序实现解决生产者与消费者问题(该问题就是需要生产者每生产一次,消费者就消费一次,映射到多线程操作就是一个线程进行一次操作,另一个线程就进行一次操作):
package com.vv.test; class Info { private String name = "李文宇"; private String content = "钢琴教师"; private boolean flag; public Info() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public synchronized void set(String name,String content){ if(!flag){ try { super.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } setName(name); setContent(content); flag = false; super.notify(); } public synchronized void get(){ if(flag){ try { super.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.println(getName()+"是"+getContent()); flag = true; super.notify(); } } class Producer implements Runnable { private Info info; private boolean flag = true; public Producer(Info info) { this.info = info; } @Override public void run() { for(int i = 0;i<50;i++){ if(flag){ info.set("梁维伟", "程序员"); flag = false; } else { info.set("李文宇", "钢琴教师"); flag = true; } } } } class Consumer implements Runnable { private Info info; public Consumer(Info info) { this.info = info; } @Override public void run() { for(int i = 0;i<50;i++){ info.get(); } } } public class TestProducerConsumer { public static void main(String[] args) { Info info = new Info(); Producer producer = new Producer(info); Consumer consumer = new Consumer(info); Thread thread1 = new Thread(producer); Thread thread2 = new Thread(consumer); thread1.start(); thread2.start(); } }
浙公网安备 33010602011771号