黑马程序员_线程和多线程

------- android培训java培训、期待与您交流! ----------

线程

线程是指独立不可再分的执行任务的小程序。
通过main方法启动的程序,也是一个独立的小线程。

1、JAVA中自定义线程的方式是,继承Thread类,成为其子类。
成为Thread类的子类需要重写run()方法,run方法中的代码块,就是线程会运行的代码块。
如果不重写run()代码块,则运行是调用的是父类方法,则无法实现本类的意图达到的功能。
如:
	class NewThread extends Thread {
	
	}
	这样是可以的,但是没有意义,正确的做法是:
	class NewThread extends Thread {
		public void run() {
			要执行的代码
		}
	}


这样,程序运行时,就会执行run中的代码了。


2、JAVA中还有一种方法可以使线程执行指定的代码,即使本类实现Runnable接口,然后重写run()的方法。
如:
	class NewThread implements Runnable {
		public void run() {
		要执行的代码块
		};
	}


这种方法的要点在于,Thread中有一个构造方法可以接受Runnable对象。所以可以通过新建Thread对象接收Runnable对象的方式来使线程执行指定的代码块。

多线程

多线程指的是多个线程同时运行。
需要注意的是,如果希望线程都运行同一个run()中的代码,需要让线程都运行在同一个内存空间中。
两种多线程实现的例子:

第一种例

本类对象就是线程,直接创建启动即可。(此处需要用静态全局变量才可传递参数)

		public static void main(String[] args) {
			NewThread t1 = new NewThread();
			NewThread t2 = new NewThread();
			NewThread t3 = new NewThread();
			NewThread t4 = new NewThread();
			t1.start();
			t2.start();
			t3.start();
			t4.start();
		}


	class NewThread extends Thread{
		public void run() {
			System.out.println("运行的代码");
		};
	}




第二种例子:本类对象赋给线程对象执行。
	public static void main(String[] args) {
			//只需要创建一个本类对象就足够了
			NewThread nt = new NewThread();
			//如果想要线程都运行在同一个内存中的话,切记放入同一个对象
			Thread t1= new Thread(nt);
			Thread t2= new Thread(nt);
			Thread t3= new Thread(nt);
			Thread t4= new Thread(nt);
			t1.start();
			t2.start();
			t3.start();
			t4.start();
		}
	class NewThread implements Runnable {
		public void run() {
			System.out.println("运行的代码");
		};
	}





注意事项

1、启动线程应该使用start()方法启动,而不应该直接调用run()方法,那样就不是多线程了。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
黑马程序员多线程练习题主要包括两个问题。第一个问题是如何控制四个线程在打印log之前能够同时开始等待1秒钟。一种解决思路是在线程的run方法中调用parseLog方法,并使用Thread.sleep方法让线程等待1秒钟。另一种解决思路是使用线程池,将线程数量固定为4个,并将每个调用parseLog方法的语句封装为一个Runnable对象,然后提交到线程池中。这样可以实现一秒钟打印4行日志,4秒钟打印16条日志的需求。 第二个问题是如何修改代码,使得几个线程调用TestDo.doSome(key, value)方法时,如果传递进去的key相等(equals比较为true),则这几个线程应互斥排队输出结果。一种解决方法是使用synchronized关键字来实现线程的互斥排队输出。通过给TestDo.doSome方法添加synchronized关键字,可以确保同一时间只有一个线程能够执行该方法,从而实现线程的互斥输出。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [黑马程序员——多线程10:多线程相关练习](https://blog.csdn.net/axr1985lazy/article/details/48186039)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值