Det er allerede blevet understreget, at arbejdsområdekode skal være opmærksom på samtidighed, selvom den ikke anvender samtidighedsrammen. At foretage arbejdsområdeændringer i batch og at bruge planlægningsregler gør det nemmere at dele arbejdsområdet med andre plugins (og deres programdele), der ændrer arbejdsområdet. Når først plugin'en bruger batch og regler (se Batchbehandling af ressourceændringer), er det nemt at foretage det samme arbejde vha. platformens samtidighedsmekanismer.
Et job er en asynkron basisarbejdsenhed, der udføres samtidigt med andre job. Ressource-plugin'en definerer WorkspaceJob som en nyttig mekanisme til brug for definition af asynkrone ressourceændringer. Kode, der normalt sættes i batch i en IWorkspaceRunnable, placeres i stedet for i en runInWorkspace-metode til en jobundertype i arbejdsområdet. I stedet for at udføre koden vha. IWorkspace-protokol, planlægges jobbet på samme måde som et hvilket som helst andet job. De relevante planlægningsregler skal tilføjes til jobbet, inden det planlægges.
Et eksempel på en arbejdsområde-runnable, og hvad der skal til for at gøre den til et job:
IWorkspaceRunnable myRunnable = new IWorkspaceRunnable() { public void run(IProgressMonitor monitor) throws CoreException { //udfører det egentlige arbejde her doSomeWork(); ... } }
Arbejdet flyttes til den relevante metode i undertypen WorkspaceJob.
class MyWorkspaceJob extends WorkspaceJob { public MyWorkspaceJob() { super("My Workspace Job"); } public IStatus runInWorkspace(IProgressMonitor monitor) { //udfører det egentlige arbejde her doSomeWork(); return Status.OK_STATUS; } }
Runnable skal startes specifikt:
IWorkspace arbejdsområde = ResourcesPlugin.getWorkspace(); workspace.run(myRunnable, myProject, IWorkspace.AVOID_UPDATE, null);
Jobbet planlægges lige som et hvilket som helst andet job. Platformens opgavestyringsfunktion udfører det i henhold til dets prioritet, andre job i køen og planlægningsreglerne. Bemærk, at planlægningsreglen skal knyttes til jobbet for at forhindre samtidig ændring af myProject.
MyWorkspaceJob job = new MyWorkspaceJob(); job.setRule(myProject); job.schedule();
Nu hvor funktionen er struktureret som et job, kan alle planlægningsmekanismerne (prioritet, forsinkelse, omplanlægning) benyttes. Ressourceændringsaktiviteter sættes i batch, indtil udførelsen af jobbet er afsluttet.