黑马程序员技术交流社区
标题:
怎么定义一个多线程
[打印本页]
作者:
韦振华
时间:
2013-3-27 13:48
标题:
怎么定义一个多线程
多线程的定义一种有几种方法,每种方法都是怎么实现的?还有就是线程的安全问题,怎么正确使用Synchronized来解决线程的安全问题
作者:
王浩威
时间:
2013-3-27 13:59
JDK 提供两种
一种是实现接口Runnable 实现里面的run方法 void run() 使用实现接口 Runnable 的对象创建一个线程时,启动该线程将导致在独立执行的线程中调用对象的 run 方法。
另一种是继承 Thread类重写方法run()
作者:
itserious
时间:
2013-3-27 14:06
定义线程有两种方式:
1。new 一个Thread 的子类,在子类中重写run()方法。
2. 创建一个实现Runable 接口的实例。传递给neThread的构造方法。
怎么正确使用Synchronized来解决线程的安全问题?
这个你就要看你的哪些代码是多个线程共享的。都操作了共享数据。
我把操作共享数据的代码同步了,就安全了。
作者:
罗胜华
时间:
2013-3-27 14:12
多线程的定义 :
第一: 继承Thread类
第二种: 实现Runnable接口
三.关于线程安全的问题: 其实就是防止线程并发 并发的意思就是:同时操作
所以你就要用同步代码快把你认为 有可能发生线程并发的语句括起来 再加把锁
Synchronized(this){
同步代码块
}
一般锁可以用字符串 或者是this关键字。
作者:
程宁宁
时间:
2013-3-27 14:13
定义线程2种方法:
1.继承Thread类
如:class B extends Thread{
public void run() {
//....你要实现的方法
}
}
new B().start();//运行
2.实现Runnable接口
如:class A implements Runnable{
public void run() {
//....你要实现的方法
}
}
new Thread(new A()).start();//运行
再有同步的问题,在需要同步的方法上用Synchronized修饰就行了.
作者:
黄杨
时间:
2013-3-27 14:36
创建线程可以使用继承thread类和实现Runnable接口。
实现接口Runnable的对象要实现run()方法来创建一个线程。
而继承thread的类要方法重载run()方法来创建线程。
作者:
VOIDMAIN
时间:
2013-3-29 22:56
基本都用实现接口的方式来写多线程方法,要启动多线程的话,只需要获得线程的实例,然后用start方法,让线程处于准备状态,等待jvm给线程分配内存和处理器资源执行。
作者:
王_强
时间:
2013-3-30 17:29
楼主:
首先,线程有两种方式实现,
一个是继承Thread类,再去重写run()方法,
第二个是实现Runnable接口,实现Run()方法,
这里我补充一点的是:我们一般都是用第二种,因为要是第二组的话,能实现资源共享,第一种,就是多个线程拥有独立的资源,这一点非常重要,也是为什么现在推广使用第二种的原因!
第一种:
class Demo extends Thread{
public void run(){
for(int i=0;i<60;i++)
System.out.println("demo run");
}
}
public class ThreadTest1 {
public static void main(String[] args) {
//创建好一个线程,就多了一个执行路径
Demo d=new Demo();
d.run();
for(int i=0;i<100;i++)
System.out.println("hello word");
}
}
第二种:
class Ticket implements Runnable{
private static int tick=1000;
Object obj=new Object();
boolean flag=true;
public void run(){
if(flag){
while(true){
synchronized (obj) {
if(tick>0){
System.out.println(Thread.currentThread().getName()+":"+tick--);
}
}
}
}else
while(true)
show();
}
public synchronized void show(){
if(tick>0)
System.out.println(Thread.currentThread().getName()+":"+tick--);
}
}
public class TicketTest {
/**
* 简单的卖票程序
* 多线程卖票
*/
public static void main(String[] args) {
//每创建一个线程,都会创建一个线程独立空间
//我现在只建立一个对象,
Ticket t=new Ticket();
Thread t1=new Thread(t,"0");//创建一个线程
Thread t2=new Thread(t,"1");//创建一个线程
//怎么让这个对象和线程有关联呢?
t1.start();
try{
Thread.sleep(10);
}catch(Exception e){}
t2.start();
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2